SQL语句如果在MS ACCESS上存在(选择那么)

时间:2015-10-07 04:47:53

标签: sql ms-access case

我在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”。

请帮我解决这个问题。

3 个答案:

答案 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因为更多的组织,我可以看到是否有任何语法或字段没有注册。

最后,如果没有你的支持,我无法得到这个问题的答案。非常感谢你们。