我有一个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 <> 0
和AND T_PURCHASEINVOICE.C_TAXAMOUNT <> 0
将删除所有税收为零的条目。
我需要显示的引用如下purchase credit: MRCR
和purchase 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时,该行才会包含在结果中。