我有一张这样的表:
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中聚集在一起,所有具有价值的膳食类型都应该向上移动。 提前致谢。
答案 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