SQL Query将2行组合为1个添加值

时间:2018-01-11 13:08:09

标签: sql crystal-reports

我有一个查询,可能会从我的数据库返回多个相同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中执行此操作但如果我在返回的每一行上取消余额,则显示所有记录的总余额将是错误的,因为"重复"行将被计为错误。

2 个答案:

答案 0 :(得分:0)

我不确定您需要什么样的报告,但是这样的查询可能会有用:

select ID, Company, max(BillAmount), sum(AmountPaid) 
from Payment 
group by ID
在胡安·卡洛斯的建议之后改善了

答案 1 :(得分:0)

为此,有2个选项可用。

  1. 在Crystal报告方

    • 在水晶报告中,按照此链接的建议,可以按照steps
    • 进行分组
    • 对于群组摘要,在添加群组后,将所有字段放在群组页脚中,请检查此link
  2. 在Sql端有以下建议(你没有定义使用哪个sql或db,我假设Sqlserver 2012及以上版本)

  3. 获取额外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
    

    输出

    enter image description here