SQL: if value exists then show else hide



我有一个SQL查询,过滤购买信用额度和发票,并删除任何零税额,它刚刚曝光,有一些我需要包括我得到正确的数字。幸运的是,这几张发票和信用票据可以在参考编号上识别,不幸的是,我不知道如何编写这样的查询。我猜它应该是一个if语句。如有任何帮助,将不胜感激,查询如下。

SELECT 
--T_PURCHASEINVOICE.C_ID, 
T_PURCHASEINVOICE.C_DATE, 
T_PURCHASEINVOICE.C_NUMBER, 
T_PURCHASEINVOICE.C_NETAMOUNT  , 
T_PURCHASEINVOICE.C_GROSSAMOUNT, 
T_PURCHASEINVOICE.C_TAXAMOUNT , 
T_PURCHASEINVOICE.C_PERIOD,
T_PURCHASEINVOICE.C_ALTERNATEREFERENCE ,
T_TAXRATE.C_CODE
FROM 
T_PURCHASEINVOICE (NOLOCK) 
JOIN T_PURCHASEINVOICE_TAXLINE (NOLOCK) ON T_PURCHASEINVOICE.C_ID = T_PURCHASEINVOICE_TAXLINE.C__OWNER_ 
JOIN T_TAXRATE (NOLOCK) ON T_PURCHASEINVOICE_TAXLINE.C_TAXRATE = T_TAXRATE.C_ID 
WHERE 
T_TAXRATE.C_CODE = '01' 
AND T_PURCHASEINVOICE.C_ALTERNATEREFERENCE LIKE '%MRINV%'
--AND T_PURCHASEINVOICE.C_TAXAMOUNT <> 0 
UNION ALL 
SELECT 
--T_PURCHASECREDITNOTE.C_ID, 
T_PURCHASECREDITNOTE.C_DATE, 
T_PURCHASECREDITNOTE.C_NUMBER, 
case when T_PURCHASECREDITNOTE.C_NUMBER  = 'PCN' THEN 1 ELSE -1 END * T_PURCHASECREDITNOTE.C_NETAMOUNT , 
case when T_PURCHASECREDITNOTE.C_NUMBER  = 'PCN' THEN 1 ELSE -1 END * T_PURCHASECREDITNOTE.C_GROSSAMOUNT ,
case when T_PURCHASECREDITNOTE.C_NUMBER  = 'PCN' THEN 1 ELSE -1 END * T_PURCHASECREDITNOTE.C_TAXAMOUNT ,
T_PURCHASECREDITNOTE.C_PERIOD,
T_PURCHASECREDITNOTE.C_ALTERNATEREFERENCE,
T_TAXRATE.C_CODE 
FROM 
T_PURCHASECREDITNOTE (NOLOCK) 
JOIN T_PURCHASECREDITNOTE_TAXLINE (NOLOCK) ON T_PURCHASECREDITNOTE.C_ID = T_PURCHASECREDITNOTE_TAXLINE.C__OWNER_ 
JOIN T_TAXRATE (NOLOCK) ON T_PURCHASECREDITNOTE_TAXLINE.C_TAXRATE = T_TAXRATE.C_ID 
WHERE 
T_TAXRATE.C_CODE = '01'
AND T_PURCHASECREDITNOTE.C_ALTERNATEREFERENCE LIKE '%MRCR%'
--AND T_PURCHASECREDITNOTE.C_TAXAMOUNT <> 0 

你可以看到我已经注释掉了AND T_PURCHASECREDITNOTE.C_TAXAMOUNT <> 0AND T_PURCHASEINVOICE.C_TAXAMOUNT <> 0将删除所有税收为零的条目。

我需要显示的引用如下purchase credit: MRCRpurchase invoice: MCINV。下面是需要添加到另一个查询的内容,如果C_TAXAMOUNT为零,除非C_ALTERNATIVEREFERENCE喜欢'%MRCR%',否则不会显示,这就是我如何看到它不幸的是没有实现的技能。

SQL通过过滤数据工作,因此if语句的概念在这里并不真正适用。相反,您使用条件来选择应该返回的内容,这是SQL的WHERE子句所做的;返回符合WHERE条件的所有行,不符合WHERE条件的所有行。

您想要具有零税OR的那些具有特定引用(包括如果两者都为真;但是OR也包括在内)。

所以你可以替换:

AND T_PURCHASEINVOICE.C_ALTERNATEREFERENCE LIKE '%MRINV%'
--AND T_PURCHASEINVOICE.C_TAXAMOUNT <> 0 

AND (
T_PURCHASEINVOICE.C_ALTERNATEREFERENCE LIKE '%MRINV%'
OR T_PURCHASEINVOICE.C_TAXAMOUNT <> 0 
)

因此,只有当括号内的一个或两个条件都返回true时,该行才会包含在结果中。

最新更新