2016-10-31 55 views
1

的我有三個臨時列,如何色譜柱結合兩個表

  1. @Pid (PartyId bigint)它包含了所有Partyid

  2. @t PartyID bigint,PartyName varchar(50)SaleQty decimal(18,2))它包含財政年度15-16各方的 銷售歷史。

  3. @ty PartyID bigint,PartyName varchar(50)SaleQty decimal(18,2))它包含 財政年度16-17各方的銷售歷史。

我想兩個臨時表@t@ty這樣的方式的 記錄兩融創的任何一方ID應該是在一排相結合。並且如果任何partyid沒有進入表@t@ty中的任何一個,那麼在該財政年度銷售額Q應該爲零。

我已經做了以下查詢來解決這個問題。

select A.PartyName,isnull(SUM(A.SaleQty),0) as TotalSale,isnull(SUM(B.SaleQty),0) as TotalSaleB 
from @t A 
left join @ty B ON B.PartyId=A.PartyID 
inner join @Pid P on P.PartyID=A.PartyID and B.PartyID=P.PartyID 
where PartyName like'%Jain' 
group by A.PartyID,A.PartyName 

我的輸出是

PartyName    TotalSale(15-16)  TotalSale(16-17) 
JAIN TRADERS (DHAMPUR) 16682.00     9699.00 

我要的結果應該是

PartyName    TotalSale(15-16)  TotalSale(16-17) 
JAIN TRADERS (DHAMPUR) 389.00     139.00 
Sourav Traders   3899.00     0.00 
Tickrej Traders   0.00      0.00 

,但我無法得到期望的結果。請在這裏幫助我一些。

+2

請出示電流輸出和預期輸出 – TheGameiswar

+0

我的問題編輯 –

+0

難道你不想要的總銷售額每個風雲?將兩個表格合併到一個臨時表格中並添加一列FY。左側從@Pid連接該表。然後你可以得到FY的總銷售額。 –

回答

1

試試這個:

declare @Pid table (PartyId bigint) 
insert into @Pid values (1) 
insert into @Pid values (2) 
insert into @Pid values (3) 
insert into @Pid values (4) 


declare @t table (PartyID bigint, PartyName varchar(50), SaleQty decimal(18,2)) 
insert into @t values(1, 'a', 10) 
insert into @t values(1, 'c', 5) 
insert into @t values(2, 'b', 10) 
insert into @t values(4, 'b', 20) 

declare @ty table(PartyID bigint,PartyName varchar(50), SaleQty decimal(18,2)) 
insert into @ty values(1, 'a', 10) 
insert into @ty values(2, 'c', 15) 
insert into @ty values(2, 'b', 10) 


select c.PartyID as PartyID, ISNULL(sum(A.SaleQty), 0) as TotalSale15_16 into #A 
from @t A right join @Pid c on A.PartyID = c.PartyId 
group by C.PartyID 

select c.PartyID as PartyID,ISNULL(sum(B.SaleQty), 0) as TotalSale16_17 into #B 
from @ty B right join @Pid c on B.PartyID = c.PartyId 
group by C.PartyID 

select A.PartyID, ISNULL(a.TotalSale15_16, 0) as TotalSale16_17, ISNULL(b.TotalSale16_17, 0) as TotalSale16_17 
from #A a join #B b on a.PartyID = b.PartyID 

drop table #A 
drop table #B 


result: 

PartyID TotalSale16_17 TotalSale16_17 
1 15.00 10.00 
2 10.00 25.00 
3 0.00 0.00 
4 20.00 0.00 
1

您需要@Pid是「基地」表中,左連接兩個表吧。 你還需要使用COALESCE(或ISNULL)從它存在任何臨時表中獲取的黨名。

SELECT COALESCE(A.PartyName, B.PartyName), 
     COALESCE(SUM(A.SaleQty, 0)) TotalSale_t, 
     COALESCE(SUM(B.SaleQty, 0)) as TotalSale_ty 
FROM @Pid C 
LEFT JOIN @t A ON C.PartyId = A.PartyId 
LEFT JOIN @ty B ON C.PartyId = B.PartyId 
GROUP BY A.PartyName, B.PartyName 
+0

這個查詢是不夠的,因爲它可能發生任何黨派可能沒有任何業務在任何財政年度,然後totalSale_t和TotalSale_ty應爲零。 –

+0

兩者都將爲零,請注意使用合併。但是,在這種情況下,派對名稱將爲空。 –

+0

但我想顯示派對名稱是可能的。 –