簡體   English   中英

帶有查詢和分組依據的 SQL Sum

[英]SQL Sum with query and Group by

我有2張桌子:

在此處輸入圖片說明

像這樣,並希望通過 ProductCode = Discount-1000 上的條件來計算 tblsoinvoiceheader 上的賬單和子查詢的總和

我應該有什么樣的查詢?

要在tblsoinvoiceheader准備數據,我們需要使用這樣的查詢:

select TransactionDate, 
       count(*) CountOfBill, 
       sum(InvoiceAmountWithTax) InvoiceAmountWithTax 
from tblsoinvoiceheader
group by TransactionDate

然后將其與以下查詢的結果連接:

select (-1)*LineAmountWithTax
from tblsoinvoiceitem
where ProductCode = 'Discount-1000'

加起來:

select * from (
    select (-1)*LineAmountWithTax
    from tblsoinvoiceitem
    where ProductCode = 'Discount-1000'
-- i used cross join because you didn't specify joining condition and it looks like you want to 
-- join all recrods
) a cross join (
    select TransactionDate, 
           count(*) CountOfBill, 
           sum(InvoiceAmountWithTax) InvoiceAmountWithTax 
    from tblsoinvoiceheader
    group by TransactionDate
) b

如果每張發票最多有一個DISCOUNT行,則可以使用:

SELECT h.TransactionDate,
       COUNT(*) AS CountOfBill,
       SUM(h.InvoiceAmountWithTax) AS InvoiceAmountWithTax,
       SUM(CASE WHEN i.Remark = 'Discount' THEN -i.LineAmountWithTax END) AS Discount
FROM tblsoinvoiceheader h LEFT JOIN
     tblsoinvoiceitem i
     ON i.DocNo = h.DocNo AND
        i.Remark = 'Discount'
GROUP BY h.TransactionDate;

如果每個文檔可以有多個折扣,則需要預先匯總。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM