如何将行重新排列到不同的列

时间:2018-05-16 14:45:32

标签: sql sql-server

我有一个表来记录员工在指定日期生成的产品,这是它的结构:

EmpId   Date        ProductA ProductB
001     01/01/2018  5        3
001     01/02/2018  2        5
002     01/01/2018  3        4
002     01/02/2018  1        2 

以下是我必须从上表中获得的示例报告:

           01/01/2018           01/02/2018
EmpId  ProductA  ProductB  ProductA  ProductB
001    5         3         2         5
002    3         4         1         2 

...也许很难有完美的解决方案,你可以给我看一个链接,剪辑或相关文件来解决问题,感谢你的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用数据透视查询..但如果日期值太多,则会很笨拙..

with t(empid, date, ProductA, ProductB) as
(
select '001', '01/01/2018',  5, 3 union all
select '001', '01/02/2018',  2, 5 union all
select '002', '01/01/2018',  3, 4 union all
select '002', '01/02/2018',  1, 2 
)
select empid,
sum(case when date='01/01/2018' then ProductA end) ProductA,
sum(case when date='01/01/2018' then ProductB end) ProductB,
sum(case when date='01/02/2018' then ProductA end) ProductA,
sum(case when date='01/02/2018' then ProductB end) ProductB 
from t
group by empid