我试图通过此查询来计算客户费用而不包括税金。在这种情况下,客户费用和税收被称为i.cht_itemcode(VARCHAR(5)),它位于Invoicedetail表上。 最初我使用LEFT JOIN来引入Invoicedetail表,这是错误的。 Orderheader表中的值o.ord_charge与ivd_charge相同,其中cht_itemcode是LHF。
我最终以这种方式编写了这部分,并删除了左连接。我没有尝试在查询本身中执行SUM,而是决定拆分2个不同的费用金额,而不是在SSRS中执行SUM。
CASE WHEN o.ord_invoicestatus='AVL'
THEN o.ord_charge
ELSE (select sum(i.ivd_charge) from invoicedetail i
where i.cht_itemcode='LHF' and i.ord_hdrnumber=o.ord_hdrnumber)
END as 'Revenue',
(SELECT SUM(I.IVD_CHARGE) from invoicedetail i where
i.ord_hdrnumber=o.ord_hdrnumber and i.cht_itemcode not in ('LHF','HST2','TAX3','GST','BCCT'))'Accessorial'
答案 0 :(得分:0)
我个人会将联接更改为发票明细更改为子查询加入
FROM Orderheader o
left join (SELECT i.ord_hdrnumber,
SUM(i.IVD_CHARGE) IVD_CHARGE
FROM invoicedetail i
WHERE i.cht_itemcode<>'DEL'
and cht_itemcode NOT IN ('HST2','TAX3','BCCT')
GROUP BY i.ord_hdrnumber
) i ON o.ord_hdrnumber=i.ord_hdrnumber
然后只需将您的案例陈述更改为
(CASE WHEN o.ord_invoicestatus='AVL'
THEN o.ord_totalcharge ELSE i.IVD_CHARGE END) AS 'Revenue'
不要忘记通过
从您的论坛中移除i.cht_itemcode
答案 1 :(得分:0)
我无法解决您的所有问题,但我认为您的Case / Sum声明已经走上了正确的轨道;我是条件SUM语句的忠实粉丝。但是我更喜欢略有不同。
您需要编写查询,以便为所有数据执行所有连接,然后在执行总和的实际选择字段中执行:
SUM( Case
When code_table.code_desc = 'Tax Code'
Then Null Else value_table.dollar_value END )
不同之处在于总和位于行的开头而不是嵌入到案例中。这允许您执行的操作是在查询结束时使用GROUP BY
来处理要合并为一个的展开记录。也许这可以帮助您处理您要回复的多条记录?
答案 2 :(得分:0)
我最终完全删除了LEFT JOIN,并且有2个单独的列,1个用于客户费用,1个用于辅助,所以现在我可以将它们一起添加到SSRS中。
CASE WHEN o.ord_invoicestatus='AVL' then o.ord_charge ELSE
(select sum(i.ivd_charge) from invoicedetail i where
i.cht_itemcode='LHF' and i.ord_hdrnumber=o.ord_hdrnumber) END as 'Revenue',
(SELECT SUM(I.IVD_CHARGE) from invoicedetail i where
i.ord_hdrnumber=o.ord_hdrnumber and i.cht_itemcode not in ('LHF','HST2','TAX3','GST','BCCT'))'Accessorial'