Sql server sql查询中的Pivot

Sql 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

我有这个查询。这个查询有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
    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,那么我是如何做到这一点的”,因为这在您的查询中似乎很混乱