如何在 SQL Server 中对多个列进行透视

问题描述 投票:0回答:1

我有下表

[EMPLOYEE]

姓名 角色 账单$ 收入
销售经理 $500 $600
副总裁 $800 900 美元
天使 销售经理 100 美元 200 美元
天使 副总裁 300 美元 400 美元
乍得 销售经理 400 美元 300 美元
乍得 副总裁 $600 100 美元

如何使用数据透视表查询表,或者交叉应用以获得以下结果:

姓名 销售经理计费 销售经理收入 副总裁计费 收入副总裁
$500 $600 $800 900 美元
天使 100 美元 200 美元 300 美元 400 美元
乍得 400 美元 300 美元 $600 100 美元

如有任何帮助,我们将不胜感激。谢谢!

SELECT 
    Name, [Sales Mgr] AS 'Sales Mgr Billed', [VP] AS 'VP Billed'
FROM
    (SELECT 
         Name, Role, Billed$, Revenue 
     FROM 
         EMPLOYEE) src
PIVOT
    (SUM(Billed$)
        FOR Role IN ( [Sales Mgr], [VP])
    ) AS pvBilled
PIVOT
    (SUM(Revenue)
         FOR Role IN ( [Sales Mgr], [VP])
    ) AS pvRevenue
sql-server t-sql azure-sql-database pivot-table
1个回答
0
投票

一种方法是将行与账单值和收入值联合起来,然后对生成的联合子查询应用数据透视。下面是查询

select Billed.Name,Billed.[Sales Mgr Billed],[Sales Mgr Revenue],[VP Billed], [VP Revenue] from 
(
     SELECT Name, Role + ' ' + 'Billed' AS Role, Billed$ FROM EMPLOYEE
     UNION ALL
     SELECT Name, Role + ' ' + 'Revenue' AS Role, Revenue FROM EMPLOYEE
) as p
PIVOT(
      SUM(Billed$)
      FOR Role IN ( [Sales Mgr Billed], [VP Billed],[Sales Mgr Revenue], [VP Revenue])) AS Billed

输出:

姓名 销售经理计费 销售经理收入 副总裁计费 收入副总裁
天使 100 200 300 400
乍得 400 300 600 100
500 600 800 900

演示@fiddle

© www.soinside.com 2019 - 2024. All rights reserved.