SQL Statement IF EXIST(SELECT THEN ELSE) on MS ACCESS



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

最后,没有你的支持,我无法得到这件事的答案。非常感谢你们。

最新更新