Sql server sql查询中的Pivot
我有这个查询。这个查询有union allSql server sql查询中的Pivot,sql-server,pivot,Sql Server,Pivot,我有这个查询。这个查询有union all select cm.comp_name,e.Name_Employee,SUM(im.MSalary) MSalary,ID_invoice from MMas im , employee e , company cm where e.ID_Employee = im.ID_Employee and im.cid = cm.cid and im.ID_Employee=74
select cm.comp_name,e.Name_Employee,SUM(im.MSalary) MSalary,ID_invoice
from MMas im , employee e , company cm
where
e.ID_Employee = im.ID_Employee
and im.cid = cm.cid
and im.ID_Employee=74
group by cm.comp_name,e.Name_Employee , ID_invoice
union all
select cm.comp_name, e.Name_Employee,SUM(id.Amount) FBenefits,ID_invoice
from MMas im, MDil id,employee e, company cm
where
im.MInd =id.MInd
and e.ID_Employee=im.ID_Employee
and cm.cid=im.cid
and im.ID_Employee=74
group by cm.comp_name,e.Name_Employee ,ID_invoice
这显示了这样的结果
comp_name Name_Employee ID_Employee MSalary ID_invoice
ABC_Company David 74 1000 98950
ABC_Company David 74 0 98950
comp_name Name_Employee ID_Employee MSalary F_Benefits ID_invoice
ABC_Company David 74 1000 0 98950
我想要这样的结果在哪里
comp_name Name_Employee ID_Employee MSalary ID_invoice
ABC_Company David 74 1000 98950
ABC_Company David 74 0 98950
comp_name Name_Employee ID_Employee MSalary F_Benefits ID_invoice
ABC_Company David 74 1000 0 98950
怎么做?请试试这个-
SELECT comp_name, Name_Employee,ID_Employee,SUM(MSalary) Salary,SUM(FBenefits)F_Benefits,ID_invoice
FROM
(
select cm.comp_name,e.Name_Employee,SUM(im.MSalary) MSalary, 0 FBenefits ,ID_invoice
from MMas im , employee e , company cm
where
e.ID_Employee = im.ID_Employee
and im.cid = cm.cid
and im.ID_Employee=74
group by cm.comp_name,e.Name_Employee , ID_invoice
union all
select cm.comp_name, e.Name_Employee,0 MSalary ,SUM(id.Amount) FBenefits,ID_invoice
from MMas im, MDil id,employee e, company cm
where
im.MInd =id.MInd
and e.ID_Employee=im.ID_Employee
and cm.cid=im.cid
and im.ID_Employee=74
group by cm.comp_name,e.Name_Employee ,ID_invoice
)x
GROUP BY comp_name, Name_Employee,ID_Employee,ID_invoice
您应该能够使用“外部应用”和“取出接头”获得F收益金额
select cm.comp_name,
e.Name_Employee,
sum(im.MSalary) MSalary,
id.FBenefits,
ID_invoice
from employee e
join MMas im on e.ID_Employee = im.ID_Employee
join company cm on im.cid = cm.cid
outer apply (
select sum(id.Amount) FBenefits
from MDil id
where im.MInd = id.MInd
) id
where e.ID_Employee = 74
group by cm.comp_name,
e.Name_Employee,
id.FBenefits,
ID_invoice
CTE只是内部SQL临时结果集的包装器。因此,一旦您将sql放入CTE中,您可以在下一个语句中使用它了解更多详细信息,请阅读“如果我不想使用CTE,那么我是如何做到这一点的”,因为这在您的查询中似乎很混乱