具有多个分组的sql pivot

时间:2012-02-10 21:16:46

标签: sql pivot-table

我有一张这样的表:

EmpId--Meal--Day--Value

1--Brkfst--1--10

1--Brkfst--1--20

1--Brkfst--2--30

1--Lunch--3--40

2--Brkfst--1--50

2--Lunch--2--60

2--Brkfst--1--70

2--Brkfst--2--80

输出应为:

EMPID--Meal--Day1--Day2--Day3

1--brkfst--10--30--null

1--brkfst--20--null-null

1--lunch--null--null--40

2--brkfst--50--80--null

2--brkfst--70--null--null

基本上,每位员工的膳食类型可以有不同的价值,但一天内可以有多种膳食类型。 关键点是员工的所有膳食类型应该在o / p中聚集在一起,所有具有价值的膳食类型都应该向上移动。 提前致谢。

1 个答案:

答案 0 :(得分:0)

DECLARE @someTable TABLE (empid INT, Meal VARCHAR(10), [Day] INT, Value INT);

INSERT INTO @someTable(empid, Meal, [Day], Value)
SELECT 1, 'Brkfst', 1, 10 UNION ALL
SELECT 1, 'Brkfst', 1, 20 UNION ALL
SELECT 1, 'Brkfst', 2, 30 UNION ALL
SELECT 1, 'Lunch',  3, 40 UNION ALL
SELECT 2, 'Brkfst', 1, 50 UNION ALL
SELECT 2, 'Lunch',  2, 60 UNION ALL
SELECT 2, 'Brkfst', 1, 70 UNION ALL
SELECT 2, 'Brkfst', 2, 80;

WITH SRC AS (
    SELECT empid, Meal, [Day], Value
    FROM @someTable        
)
SELECT empid, Meal, [1] AS Day1, [2] AS Day2, [3] AS Day3
FROM SRC
PIVOT(Sum(Value) FOR [Day] IN([1], [2], [3])) P

结果:

empid       Meal       Day1        Day2        Day3
----------- ---------- ----------- ----------- -----------
1           Brkfst     30          30          NULL
2           Brkfst     120         80          NULL
1           Lunch      NULL        NULL        40
2           Lunch      NULL        60          NULL