【发布时间】:2014-04-03 13:31:14
【问题描述】:
已编辑:感谢大家的回复,但似乎一切都脱离了上下文。我的错,我应该详细说明。
查询是针对Master-Child reportviewer(后端的SQL Server 2008 R2);其中 delvoucher 与 dvdetails 表具有 1:m 关系。该报告实际上是一张发票,在顶部(列表)显示cient_title和deliverydate等,并在内部tablix(主子报告场景)中显示交付细节。在底部,我显示所选月份的所有应付金额的总和。 (月份是通过放置在相同表单中的日期时间选择器选择的,该表单还包含我的 reportviewer 控件并刷新所选值更改的报告)。但是,我想得到自客户开始以来的总应付额减去本月的金额,即应付余额)。我应该使用 UNION 吗?并运行单独的查询以获取 SUM(amount) 而无需应用 WHERE month is blah blah。
总体问题是我必须显示拖欠 (sum(payable) - sum(paid)) 支付的金额是从另一个表中获得的 : 编辑关闭
我的查询
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, ............
这可能很简单,但它给了我错误。我哪里错了
【问题讨论】:
-
是哪个数据库系统?
-
旁注:您可能需要考虑使用
delvoucher.dvdate >= @startofmonth AND delvoucher.dvdate < DATEADD(month,1,@startofmonth)进行搜索。对于更大的数据集,这至少让服务器有机会使用delvoucher.dvdate的索引来定位所需的数据。您当前的样式意味着必须扫描整个表才能找到匹配的行。
标签: sql sql-server