我正在执行带有子查询的 SQL 查询,并且我希望该子查询的条件大于零。
这是我的询问:
SELECT Ledger.Grup,
ledger.CompanyName,
ledger.City,
ledger.ContactNo,
(ISNULL((SELECT SUM(ConditionFine)
FROM tbl_Billing
WHERE partyid = ledger_id
AND partytype = 'GOLD'
AND CrDr = 'CR'
AND AccountMode = 'ESTIMATE'
AND BranchId = 13), 0) - ISNULL((SELECT SUM(ConditionFine)
FROM tbl_Billing
WHERE partyid = ledger_id
AND partytype = 'GOLD'
AND CrDr = 'DR'
AND AccountMode = 'ESTIMATE'
AND BranchId = 13), 0)) AS GoldFine,
(ISNULL((SELECT SUM(ConditionFine)
FROM tbl_Billing
WHERE partyid = ledger_id
AND partytype = 'SILVER'
AND CrDr = 'CR'
AND AccountMode = 'ESTIMATE'
AND BranchId = 13), 0) - ISNULL((SELECT SUM(ConditionFine)
FROM tbl_Billing
WHERE partyid = ledger_id
AND partytype = 'SILVER'
AND CrDr = 'DR'
AND AccountMode = 'ESTIMATE'
AND BranchId = 13), 0)) AS SilverFine,
(ISNULL((SELECT SUM(AfterTax)
FROM tbl_Billing
WHERE partyid = ledger_id
AND CrDr = 'CR'
AND AccountMode = 'ESTIMATE'
AND BranchId = 13), 0) - ISNULL((SELECT SUM(AfterTax)
FROM tbl_Billing
WHERE partyid = ledger_id
AND CrDr = 'DR'
AND AccountMode = 'ESTIMATE'
AND BranchId = 13), 0)) AS Amount
FROM
tbl_Billing billing
LEFT OUTER JOIN
tbl_Ledger ledger ON ledger.Ledger_ID = billing.partyid
WHERE
billing.BranchID = 13
AND Ledger.CompanyName IS NOT NULL
AND AccountMode = 'ESTIMATE'
现在,根据此查询,我想要 Goldfine > 0、SilverFine > 0、Amount > 0,即如果这三列中的任何一个值大于 0,则显示条件行数据,否则如果这些列等于 0,则该行不显示不想展示。
一个简单的方法是使用公用表表达式,这样您就不需要重复计算:
WITH MyCTE
AS (
... put your query here ...
)
SELECT *
FROM MyCTE
WHERE Goldfine > 0 OR SilverFine > 0 OR Amount > 0