1

可能重复:
根据表的另一个总和对表的列求和

我从 sql 中的子选择中的已求和列中求和一列,但它给了我与已求和列相同的值。TotalAmount 应该与 InvoiceTotal 相加,但它只是复制相同的值。谁能看到我做错了什么,或者是否有更好的方法来解决这个问题?

declare @ReportLines table 
    (RebateInvoiceID int, 
     RebateSetupID int ,
     ShortItemNo float primary key(RebateInvoiceID,RebateSetupID,ShortItemNo),
     TotalAmount float,
     InvoiceTotal float,
     TotalQuantity int )
insert @ReportLines
select
  Total.RebateInvoiceID
, Total.ID
, Total.ShortItemNo
, Total.TotalAmount
, sum(Total.TotalAmount) as InvoiceTotal
, Total.TotalQuantity
from
(
select 
i.RebateInvoiceID
,coalesce(rs.WholesalerRebateSetupID,r.RebateSetupID) as ID
,bl.ShortItemNo
, sum(round(r.Amount,2)) as TotalAmount
, sum(r.Quantity) TotalQuantity
from
  @Invoices i
  join RebateInvoices ri (nolock) on 
    ri.RebateInvoiceID=i.RebateInvoiceID
  inner loop join Rebates r (nolock) on
    r.RebateInvoiceID=i.RebateInvoiceID       
  join RebateSetup rs (nolock) on
    rs.RebateSetupID=r.RebateSetupID
  join BidLines bl (nolock) on 
    r.BidLineGuid=bl.BidLineGuid
  join @Products p on
    p.ShortItemNo=bl.ShortItemNo
  left join ChargebackDetailHistory cd (nolock) on 
    r.DocumentBranchPlant = cd.DocumentBranchPlant
    and r.DocumentNumber = cd.DocumentNumber
    and r.DocumentType = cd.DocumentType
    and r.LineNumber = cd.LineNumber
  left join EDI.dbo.JDE_SaleDetail sd (nolock) on 
    r.DocumentBranchPlant = sd.BranchPlant
    and r.DocumentNumber = sd.OrderNumber
    and r.DocumentType = sd.OrderType
    and r.LineNumber = sd.LineNumber
where 
    cd.InvoiceDate between @BeginDate and @EndDate
    or sd.InvoiceDate between @BeginDate and @EndDate
group by
  i.RebateInvoiceID
, coalesce(rs.WholesalerRebateSetupID,r.RebateSetupID)
, bl.ShortItemNo
) Total

group by 
total.rebateinvoiceid,
total.ID,
total.shortitemno,
total.totalamount,
total.totalquantity
4

2 回答 2

4

不要在您尝试进行 SUM 的同一字段上进行分组。

于 2012-07-23T20:59:57.330 回答
2

这是因为您按TotalAmount和分组TotalQuantity。按这些值分组是没有意义的。由于其余三个组字段与子选择中的相同,因此您将获得相同的行。您必须按较少的字段进行分组,以便将子选择的几行统一到外部选择的一行中,以获得总和的总和。

但在我看来,这个外部选择根本没有意义,为什么不单独使用内部选择呢?

于 2012-07-23T21:04:08.103 回答