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。これらの値でグループ化しても意味がありません。残りの 3 つのグループ フィールドはサブ選択と同じであるため、同じ行が取得されます。合計の合計を取得するために、サブ選択の複数の行を外部選択の 1 行に統合するには、より少ないフィールドでグループ化する必要があります。

しかし、この外側の選択はまったく意味がないように思えますが、内側の選択だけを使用しないのはなぜですか?

于 2012-07-23T21:04:08.103 に答える