2012-02-10 50 views
0

SQL樞軸我有這樣一個表:與多個分組

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 

基本上每個僱員可具有不同的值用於膳食類型,但可以有多個膳食類型在一天之內。要點是所有膳食類型的員工應該聚集在一起,並且所有具有價值的膳食類型應該向上移動。 在此先感謝。

+0

沒有意義,爲什麼你有兩個記錄的EmpID = 1和膳食= brkfst的組合。當你樞軸轉動時,你必須選擇一些東西來分組 - 從你的例子結果中,我假設你希望按EmpId和Meal分組,即使你不是。 – 2012-02-10 21:42:42

回答

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 
+0

感謝J Cooper的回覆。 但是我不想總結這些價值。我想要顯示所有膳食的價值,因此,如果員工1在第1天的早餐有2個值,第2天的早餐的值爲2,那麼應該有對於brkfast,如果員工1的行數爲2行,如果他在brkfsast中有第1天的3個值和第2天的2個值,那麼在o/p中應該有3行,第2天的第3個值爲空。我想要o/p就像在我原來的查詢。有沒有其他的解決方案,如果它不可能通過使用樞軸和分區?謝謝! – 2012-02-13 11:54:07

+0

@ user1202939 - 好吧,讓我們假設第1天的員工1有兩個值(A,B)用於早餐。第2天的員工1的早餐也有一個價值(C)。你如何確定哪個記錄值(C)與A或B一起? – 2012-02-13 13:49:51

+0

它應該直接進入最上面的空位。如果它的A或B,只有員工和膳食組合應該匹配,則無關緊要。 – 2012-02-13 16:13:30