簡體   English   中英

SQL - 在月份有WHERE時獲得所有月份的總和

[英]SQL - Getting Sum of all month payable while having a WHERE on months

編輯:謝謝大家的回復,但似乎一切都脫離了背景。 我的錯,我應該了解更多細節。

該查詢適用於Master-Child reportviewer(后端的SQL Server 2008 R2); 其中delvoucher與dvdetails表的關系為1:m。 該報告實際上是一張發票,在頂部(列表)上顯示cient_title和deliverydate等,並在內部Tablix中顯示交付詳情(Master-Child報告方案)。 在底部,我顯示所選月份的所有應付金額的總和。 (通過日期時間選擇器選擇月份,該日期時間選擇器以相同的形式放置,同時包含我的reportviewer控件並刷新有關所選值更改的報告)。 但是,我希望從客戶開始減去本月金額(即應付余額)后得到應付總額。 我要用UNION嗎? 並運行一個單獨的查詢來獲得SUM(金額)而不應用WHERE月是等等等等。

整體問題是我必須顯示欠款(總和(應付款) - 總和(已付款)),其中付款金額將從另一張表中獲得:編輯關閉

我的查詢

SELECT        
    delvoucher.dvdate, 
    delvoucher.dvno, 
    delvoucher.vehicleno, 
    delvoucher.salesman, 
    dvdetails.[desc], 
    dvdetails.supply, 
    dvdetails.empty, 
    dvdetails.amount, 
    dvdetails.rate, 
    delvoucher.title, 
    customer.currentaddress, 
    customer.phone, 
    customer.code
FROM         
    delvoucher 
    INNER JOIN dvdetails ON delvoucher.id = dvdetails.pid 
    INNER JOIN customer ON delvoucher.title = customer.title
WHERE        
    YEAR(delvoucher.dvdate) = YEAR(@i) 
    AND MONTH(delvoucher.dvdate) = MONTH(@i)

我想要的只是檢索SUM(dvdetails.amount),例如

SELECT        
    SUM(dvdetails.amount) , 
    delvoucher.dvdate, 
    delvoucher.dvno, ............

它可能很簡單,但它給我錯誤。 我哪里錯了

您可以將GROUP BY語句與SUM()來制作如下的月度摘要:

SELECT 
    SUM(dvdetails.amount), 
    YEAR(delvoucher.dvdate), 
    MONTH(delvoucher.dvdate) 
FROM
    delvoucher 
    INNER JOIN dvdetails ON delvoucher.id = dvdetails.pid 
    INNER JOIN customer ON delvoucher.title = customer.title
WHERE
    YEAR(delvoucher.dvdate) = YEAR(@i) 
    AND MONTH(delvoucher.dvdate) = MONTH(@i)
GROUP BY 
    YEAR(delvoucher.dvdate), 
    MONTH(delvoucher.dvdate)

您可以在此處閱讀相關問題: SQL查詢以在各種DATE范圍內檢索SUM

GOUP BY的文檔在這里: http//www.w3schools.com/sql/sql_groupby.asp

希望這可以幫助。

@naota有正確的答案但是如果你正在尋找像這樣的選擇,即返回所有的delvoucher行:

SELECT        
    SUM(dvdetails.amount) , 
    delvoucher.dvdate, 
    delvoucher.dvno, ............

而不是

SELECT 
    AmountSum = SUM(dvdetails.amount),
    Year = YEAR(delvoucher.dvdate),
    Month = MONTH(delvoucher.dvdate)

然后你的查詢看起來像這樣(未經測試)

SELECT        
    totals.AmountSum,
    delvoucher.dvdate, 
    delvoucher.dvno, 
    delvoucher.vehicleno, 
    delvoucher.salesman, 
    dvdetails.[desc], 
    dvdetails.supply, 
    dvdetails.empty, 
    dvdetails.amount, 
    dvdetails.rate, 
    delvoucher.title, 
    customer.currentaddress, 
    customer.phone, 
    customer.code
FROM         
    delvoucher 
    INNER JOIN dvdetails ON delvoucher.id = dvdetails.pid 
    INNER JOIN customer ON delvoucher.title = customer.title
    INNER JOIN (   
        SELECT 
            AmountSum = SUM(dvdetails.amount),
            Year = YEAR(delvoucher.dvdate),
            Month = MONTH(delvoucher.dvdate) 
        FROM
            delvoucher 
            INNER JOIN dvdetails ON delvoucher.id = dvdetails.pid 
            INNER JOIN customer ON delvoucher.title = customer.title
        WHERE
            YEAR(delvoucher.dvdate) = YEAR(@i) 
            AND MONTH(delvoucher.dvdate) = MONTH(@i)
        GROUP BY 
            YEAR(delvoucher.dvdate), 
            MONTH(delvoucher.dvdate)
    ) totals ON totals.Year = YEAR(delvoucher.dvdate) AND totals.Month = MONTH(delvoucher.dvdate)
WHERE        
    YEAR(delvoucher.dvdate) = YEAR(@i) 
    AND MONTH(delvoucher.dvdate) = MONTH(@i)

基本上你的查詢內部加入@ naota的查詢加入年和月

暫無
暫無

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

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