2015-12-06 39 views
0

我有两个tabels:求和使用金额的情况下

MonthlySalary]: 

    MS_EmployeeID MS_Semel MS_Month MS_Amount 
    22222    9   1   4000 
    22222    9   2   4000 
    22222    9   3   4000 
    22222    9   4   5000 
    22222    9   5   5000 
    22222    9   6   3000 
    22222    9   7   2000 
    22222    9   8   5000 

MSVTransaction: 

    MSV_EntitledIdNumber MSV_PaymentAmount MSV_Month 
    22222      3000    1 
    22222      3000    2 
    22222      4000    3 
    22222      5000    4 
    22222      6000    6 
    22222      7000    7 
    22222      2000    8 
    22222      5000    9 

而且我试图建立一个比较表。输出应该是这样的:

MSV_EntitledIdNumber MS_Semel Jan_MSV Jan_SML .... Aug_MSV Aug_SML 
22222      9  3000  4000   5000 5000 

我开始写这篇:

select 
    distinct [MSV_EntitledIdNumber], 
    [MS_Semel], 
    sum(case when [MSV_Month] in (1) then [MSV_PaymentAmount] else 0 end) as JanMSV, 
    sum(case when [MS_Month] in (1) then [MS_Amount] else 0 end) as JanSML, 
    sum(case when [MSV_Month] in (2) then [MSV_PaymentAmount] else 0 end) as FebMSV, 
    sum(case when [MS_Month] in (2) then [MS_Amount] else 0 end) as FebSML, 
    sum(case when [MSV_Month] in (3) then [MSV_PaymentAmount] else 0 end) as MarMSV, 
    sum(case when [MS_Month] in (3) then [MS_Amount] else 0 end) as MarSML, 
    sum(case when [MSV_Month] in (4) then [MSV_PaymentAmount] else 0 end) as AprMSV, 
    sum(case when [MS_Month] in (4) then [MS_Amount] else 0 end) as AprSML, 
    sum(case when [MSV_Month] in (5) then [MSV_PaymentAmount] else 0 end) as MayMSV, 
    sum(case when [MS_Month] in (5) then [MS_Amount] else 0 end) as MaySML, 
    sum(case when [MSV_Month] in (6) then [MSV_PaymentAmount] else 0 end) as JunMSV, 
    sum(case when [MS_Month] in (6) then [MS_Amount] else 0 end) as JunSML, 
    sum(case when [MSV_Month] in (7) then [MSV_PaymentAmount] else 0 end) as JulMSV, 
    sum(case when [MS_Month] in (7) then [MS_Amount] else 0 end) as JulSML, 
    sum(case when [MSV_Month] in (8) then [MSV_PaymentAmount] else 0 end) as AugMSV, 
    sum(case when [MS_Month] in (8) then [MS_Amount] else 0 end) as AugSML, 
    sum(case when [MSV_Month] between 1 and 8 then [MSV_PaymentAmount] else 0 end) as TotalMSV, 
    sum(case when [MS_Month] between 1 and 8 then [MS_Amount] else 0 end) as TotalSML, 
    sum(case when [MSV_Month] between 1 and 8 then [MSV_PaymentAmount] else 0 end) - 
    sum(case when [MS_Month] between 1 and 8 then [MS_Amount] else 0 end) as Delta 
from [dbo].[MSVTransaction] as msv 
inner join [dbo].[MonthlySalary] as SmlTbl on SmlTbl.MS_EmployeeID = 
msv.MSV_EntitledIdNumber 
[MS_Semel] = '9' 
and msv.[MSV_EntitledIdNumber] in (select distinct [MS_EmployeeID] from 
[dbo].[MonthlySalary]) 
group by [MSV_EntitledIdNumber],[MS_Semel] 

我得到的结果是不正确的。任何想法是什么问题的代码,我如何解决它,以获得我想要的输出?谢谢!

回答

0

我认为问题是from条款。尝试加入月份编号并使用外连接:

select . . . 
from [dbo].[MSVTransaction] msv left join 
    [dbo].[MonthlySalary] SmlTbl 
    on SmlTbl.MS_EmployeeID = msv.MSV_EntitledIdNumber and 
     smltbl.ms_month = msv.msv_month 
     [MS_Semel] = '9' 
group by msv.[MSV_EntitledIdNumber], [MS_Semel] 
+0

谢谢。那工作! – Jordan1200

相关问题