我有一个查询,可能会从我的数据库返回多个相同ID的行。这是因为它是支付表,可以多次支付发票。
所以我的结果看起来像这样。
ID Company BillAmount AmountPaid
----- --------- ------------ ------------
123 ABC 1000.00 450.00
123 ABC 1000.00 250.00
456 DEF 1200.00 1200.00
我正在构建此查询以放入Crystal Reports。如果我只是提取原始数据,我就无法在CR中进行任何子总计,因为当这个数字真的是2200美元时,它将显示3200美元。我需要显示余额,我可以在CR中执行此操作但如果我在返回的每一行上取消余额,则显示所有记录的总余额将是错误的,因为"重复"行将被计为错误。
答案 0 :(得分:0)
我不确定您需要什么样的报告,但是这样的查询可能会有用:
select ID, Company, max(BillAmount), sum(AmountPaid)
from Payment
group by ID
在胡安·卡洛斯的建议之后改善了
答案 1 :(得分:0)
为此,有2个选项可用。
在Crystal报告方
在Sql端有以下建议(你没有定义使用哪个sql或db,我假设Sqlserver 2012及以上版本)
获取额外2列(TotalBill,TotalPaid)
的记录 declare @Invoice table(id int , Company varchar(25), BillAmount int )
declare @payment table(id int , InvoiceId int, AmountPaid int )
insert into @Invoice values (1, 'ABC', 1000), (2, 'DFE', 1200)
insert into @payment values (1, 1, 450), (2, 1, 250), (3, 2, 1200)
;with cte as
( select sum(BillAmount) TotalBill from @Invoice i )
Select
i.*, p.AmountPaid ,
Sum(AmountPaid) over ( partition by i.id ) InvoiceWiseTotalPaid,
cte.TotalBill,
Sum(AmountPaid) over ( order by i.id ) TotalPaid
from
@Invoice i
Join @payment p on i.id= p.InvoiceId
, cte
输出