[英]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.