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