-3

これら 2 つのテーブルを結合しようとしていますが、結合を使用するとエラーが発生します。Union は機能しますが、必要な 3 行ではなく 2 行ですべての値を返します。これは私がこれまでに持っているものであり、それが返すものはその下にあります。どんな助けでも素晴らしいでしょう:)

select C.CustId ,SUM(Ia.Amount) as total
from Invoice I 
    inner join InvoiceAmtSummary Ia  on I.GUIDInvoice=Ia.GUIDInvoice
    inner join Customer C on  C.GUIDCustomer=I.GUIDCustomer
WHERE DATEPART(mm, I.InvoiceDate) = DATEPART(mm, DATEADD(mm, -1, getdate()))
and DATEPART(yyyy, I.InvoiceDate) = DATEPART(yyyy, DATEADD(yyyy, -0, getdate()))
group by C.CustId
union
select C.CustId ,SUM(Ia.Amount) as total2
from Invoice I 
    inner join InvoiceAmtSummary Ia  on I.GUIDInvoice=Ia.GUIDInvoice
    inner join Customer C on  C.GUIDCustomer=I.GUIDCustomer
WHERE DATEPART(mm, I.InvoiceDate) = DATEPART(mm, DATEADD(mm, -2, getdate()))
and DATEPART(yyyy, I.InvoiceDate) = DATEPART(yyyy, DATEADD(yyyy, -0, getdate()))
group by C.CustId

返された結果は以下にあり、その下に必要な結果があります

カスティッド合計
2
b 9
b 12
c16
日 3
日 12

カスティッド トータル トータル2
2         
b 9 12
c16
日 3 12
 
4

3 に答える 3

0

異なる月の SUM の 2 つの列を作成しようとしていると思います。できることは次のとおりです。

Select C.CustId ,
Sum(Case DATEPART(mm, I.InvoiceDate) 
When  DATEPART(mm, DATEADD(mm, -1, getdate())) Then Ia.Amount 
Else 0 End) As 'Total1',
Sum(Case DATEPART(mm, I.InvoiceDate) 
When  DATEPART(mm, DATEADD(mm, -2, getdate())) Then Ia.Amount 
Else 0 End) As 'Total2'
from Invoice I 
    inner join InvoiceAmtSummary Ia  on I.GUIDInvoice=Ia.GUIDInvoice
    inner join Customer C on  C.GUIDCustomer=I.GUIDCustomer
WHERE 
 DATEPART(yyyy, I.InvoiceDate) = DATEPART(yyyy, DATEADD(yyyy, -0, getdate()))
group by C.CustId

再帰結合を避けるためにケースを使用しています。

于 2013-04-03T18:56:03.333 に答える