SQL - 2个月之间的薪酬差异(差异)
有2个单独的SQL查询返回NetPay金额MonthWise。 I 想要合并它们意味着我想要2个月的差异 (第2个月金额 - 第1个月金额)作为输出。SQL - 2个月之间的薪酬差异(差异)
Query - 1
Select ISNULL(Sum(EPS.Amount),0) as Amount
From Payslip EPS
Where EPS.Emp_Id = 5 and EPS.Month_Id = 5
Query - 2
Select ISNULL(Sum(EPS.Amount),0) as Amount
From Payslip EPS
Where EPS.Emp_Id = 5 and EPS.Month_Id = 6
您可以使用Conditional Aggregation
到这两个查询
Select Sum(case EPS.Month_Id when 6 then EPS.Amount else -EPS.Amount end) as Variance
From Payslip EPS
Where EPS.Emp_Id = 5 and EPS.Month_Id in (6,5)
或
Select Sum(case EPS.Month_Id when 6 then EPS.Amount else 0 end) -
Sum(case EPS.Month_Id when 5 then EPS.Amount else 0 end)
From Payslip EPS
Where EPS.Emp_Id = 5 and EPS.Month_Id in (6,5)
结合可以在where
条款和Case
声明更换个月,如果它是不固定的。
使用几个月动态
SELECT Isnull(A.Amount, 0) - Isnull(B.amount, 0)
FROM (SELECT months,
Amount = Sum(Amount)
FROM #payslips
GROUP BY months) a
INNER JOIN (SELECT months,
Amount = Sum(Amount)
FROM #payslips
GROUP BY months) b
ON a.months = b.months + 1
WHERE a.months = 6
AND b.months = 5
的另一种方法对于较新的版本中,我们可以使用LAG
窗函数
你不能修复月ID – Dilip
@Dilip你正在使用哪个版本的SQL服务器? –
如果你不想在同一个查询中加入你的更好的可视性,使用UNION ALL
Select Amount1-Amount As Variance
from
(
Select ISNULL(Sum(EPS.Amount),0) as Amount, '0.00' Amount1
From Payslip EPS
Where EPS.Emp_Id = 5 and EPS.Month_Id = 5
UNION ALL
Select '0.00' Amount, ISNULL(Sum(EPS.Amount),0) as Amount1
From Payslip EPS
Where EPS.Emp_Id = 5 and EPS.Month_Id = 6
)am
工作不正常 – Dilip
DECLARE @month1 INT
DECLARE @month2 INT
SET @month1= 5
SET @month2= 6
Select (a.month1Amount-b.month2Amount) AS Variance from
(Select ISNULL(Sum(EPS.Amount),0) as month1Amount,EPS.Emp_Id
From Payslip EPS
Where EPS.Emp_Id = 5 and EPS.Month_Id [email protected] GROUP BY EPS.Emp_Id)a
INNER JOIN
(Select ISNULL(Sum(EPS.Amount),0) as month2Amount, EPS.Emp_Id
From Payslip EPS
Where EPS.Emp_Id = 5 and EPS.Month_Id [email protected] GROUP BY EPS.Emp_Id)b
on a.Emp_Id=b.Emp_Id
您可以动态提供月份。希望这个作品
给出错误: 消息8120,级别16,状态1,行8 列'Employee_PaySlip.Emp_Id'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 – Dilip
现在检查..我编辑了代码。 –
Downvoter还提供原因 – Dilip