2016-10-31 58 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

但我想显示派对名称是可能的。 –