数据透视表的列名不正确

时间:2020-03-26 21:47:12

标签: sql sql-server pivot-table

我试图根据查询创建数据透视表 当我选择select * from它可以正常工作,但是当我尝试选择下面的代码中所示的列时,它给我错误错误的列名

 select sr,PayDescr,PayMonAmt from (select sr= case when rtrim(Ctname.PayCat)='GS' then  1
                when rtrim(Ctname.PayCat)='BS' then  2
                when rtrim(Ctname.PayCat)='HA' then  3
                when rtrim(Ctname.PayCat)='TA' then  4
                when rtrim(Ctname.PayCat)='FA' then  5
                else 6 end
, PayDescr = rtrim(Ctname.Descr),SUM(PayMonAmt) as PayMonAmt  from 
maEmpPay mn
outer apply(
        select Descr,PayCat from maPayCat pc
        where mn.PayCat = pc.PayCat
        )Ctname
where  EmpID = mn.EmpID group by Ctname.Descr, Ctname.PayCat)   pv 
 pivot
 (
 sum (PayMonAmt) for PayDescr IN ([Basic Salary],[Food Allowance],[Tuition 
 Allowance],[Transportation Allowance])
 ) AS e 

工作代码

 select * from (  select sr= case when rtrim(Ctname.PayCat)='GS' then  1
                when rtrim(Ctname.PayCat)='BS' then  2
                when rtrim(Ctname.PayCat)='HA' then  3
                when rtrim(Ctname.PayCat)='TA' then  4
                when rtrim(Ctname.PayCat)='FA' then  5
                else 6 end
, PayDescr = rtrim(Ctname.Descr),SUM(PayMonAmt) as PayMonAmt  from 
maEmpPay mn
outer apply(
        select Descr,PayCat from maPayCat pc
        where mn.PayCat = pc.PayCat
        )Ctname where  EmpID = mn.EmpID group by Ctname.Descr, Ctname.PayCat
)   pv 
 pivot
 (
 sum (PayMonAmt) for PayDescr IN ([Basic Salary],[Food Allowance],[Tuition 
 Allowance],[Transportation Allowance])
 ) AS e

2 个答案:

答案 0 :(得分:1)

解决方案

SELECT
sr,
[Basic Salary],
[Food Allowance],
[Tuition Allowance],
[Transportation Allowance] FROM (
SELECT
    sr = CASE
        when rtrim(Ctname.PayCat)='GS' then  1
        when rtrim(Ctname.PayCat)='BS' then  2
        when rtrim(Ctname.PayCat)='HA' then  3
        when rtrim(Ctname.PayCat)='TA' then  4
        when rtrim(Ctname.PayCat)='FA' then  5
        else 6
    END,
    PayDescr = rtrim(Ctname.Descr),
    SUM(PayMonAmt) as PayMonAmt
FROM
    maEmpPay As mn
    OUTER APPLY
    (
        SELECT Descr, PayCat 
        FROM maPayCat pc
        WHERE mn.PayCat = pc.PayCat
    ) As Ctname


WHERE
    EmpID = mn.EmpID 

GROUP BY
    Ctname.Descr, 
    Ctname.PayCat) PIVOT(
SUM(PayMonAmt) FOR PayDescr IN 
(
    [Basic Salary],
    [Food Allowance],
    [Tuition Allowance],
    [Transportation Allowance]
)) As e 

答案 1 :(得分:0)

由于它是数据透视查询,因此删除PayMonAmt并添加[基本工资],[食品津贴],[学费 津贴],[交通津贴]。让我知道您的查询是否仍然无法解决:

    select sr,PayDescr,[Basic Salary],[Food Allowance],[Tuition Allowance],[Transportation Allowance] from 
          (select sr= case when rtrim(Ctname.PayCat)='GS' then  1 when rtrim(Ctname.PayCat)='BS' then  2
            when rtrim(Ctname.PayCat)='HA' then  3
            when rtrim(Ctname.PayCat)='TA' then  4
            when rtrim(Ctname.PayCat)='FA' then  5
            else 6 end , PayDescr = rtrim(Ctname.Descr),SUM(PayMonAmt) as PayMonAmt  
            from maEmpPay mn
            outer apply(
    select Descr,PayCat from maPayCat pc
    where mn.PayCat = pc.PayCat
    )Ctname
    where  EmpID = mn.EmpID group by Ctname.Descr, Ctname.PayCat)   pv 
    pivot
    (
     sum (PayMonAmt) for PayDescr IN ([Basic Salary],[Food Allowance],[Tuition Allowance],[Transportation Allowance])) AS e 
相关问题