我在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
您可以参考相关的this question。
如果找到记录,这只显示金额,但如果记录未找到,则PayFeb将清空,其中应该显示“NOT PAID”。
请帮我解决这个问题。
答案 0 :(得分:0)
要使用IIF功能,应该有一个条件,我在代码中找不到任何条件。 请尝试下面的内容;
<br> 1 2 <br>
3 4<br>
5 6<br>
答案 1 :(得分:0)
您提供的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对你几乎重复的问题的回答here
他的回答完全符合你的需要。更多地研究并理解他所编写的代码的作用。
例如
nz(格式(max(iif(m.desc ='PAY FEB',m.amount,null)),'标准'),'不支付')
在NULL的情况下显示'NOT PAID'。
答案 2 :(得分:0)
首先,我要感谢HaveNONameDisplay,Nadeem_MK和HarveyFrench,真正帮助并指出了正确的方向。我只想分享你所有的解决方案,我找到了一个技巧,希望值得知道。
基于MS ACCESS IDE查询我找到了
A)如果SELORD记录是空的或存在,则使用(选择Nz(MAX(m.amount),'NOT PAID')作为PAYFEB。
LEFT JOIN或Direct SUBQUERIES等所有类型的解决方案实际上都在运作。但我更喜欢SUBQUERIES因为更多的组织,我可以看到是否有任何语法或字段没有注册。
最后,如果没有你的支持,我无法得到这个问题的答案。非常感谢你们。