我在MS Access SQL语句中显示"NOT PAID"有问题:-
我使用Nz和IIF函数,但没有得到我想要的。
(Select Nz(m.amount, "NOT PAID")
From monthly m
Where m.year = s.year
AND m.month='February') As PayFeb
你可以参考一下这个问题。
这只显示金额,如果发现记录,但PayFeb将清空,如果记录没有发现,它应该显示"未支付"。
请告诉我如何解决这件事
要使用IIF函数,应该有一个条件,而我在你的代码中找不到任何条件。
Select iif( m.amount>0, m.amount, "NOT PAID")
From monthly m
Where m.year = s.year
And m.month='February'
你给的SQL可能被用作另一个查询的子查询(因为它有一个别名和括号围绕它和一个where子句,指的是主查询我认为)。
你不能让表"monthly"返回它在SELECT语句中没有的行。但是,您可以在主查询中执行从另一个表到该子查询的LEFT JOIN操作。然后,主查询可以在select子句中包含以下内容:iif(isnull(PayFeb.PrimaryKeyField),"NOT PAID",PayFeb.amount)
(请注意,我使用iif而不是NZ,因为iif是本地SQL函数,因此比NZ (VBA函数)更快)。
SELECT
FROM AllMonths
LEFT JOIN
(Select MonthNumber, Nz(m.amount, "NOT PAID") AS Amount
From
monthly m
Where
m.month='February') As PayFeb
ON AllMonths.MonthNumber = monthly.MonthNumber
AND
AllMonths.year = PayFeb.year
第二部分我参考了Thorsten Kettner对你几乎重复的问题的回答
他的回答正是你所需要的。多研究一下,了解他写的代码是做什么的。如
nz(format(max(m.desc = 'PAY FEB', m.amount, null)), 'Standard'), 'NOT PAID')
在NULL的情况下显示'NOT PAID'
首先我要感谢HaveNONameDisplay, Nadeem_MK和HarveyFrench,他们真正帮助并为我指出了正确的方向。我只是想分享基于你所有的解决方案,我发现了一个技巧,希望它值得知道。
基于MS ACCESS IDE查询我找到
A)如果记录是空的或存在的选择,然后使用(Select Nz(MAX(m.amount),'NOT PAID')作为PAYFEB。
所有类型的解决方案,如左JOIN或直接子查询实际上是工作的。但我更喜欢SUBQUERIES,因为更有组织,我可以看到是否有任何语法或字段未注册。
最后,没有你的支持,我无法得到这件事的答案。非常感谢你们。