2009-09-22 83 views
4

鑑於這組數據:這可以在SQL 2008中完成嗎?

SummaryID Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 
25   1  2  3  4  5  6  7  6  5  4  3  2  1  2  3 
25   1  2  3  4  5  6  7  6  5  4  3  2  1  2  3 
25   1  2  3  4  5  6  7  6  5  4  3  2  1  2  3 

可以將數據擺動或立方或任何進入這個:

 0 1 2 3 4 5 6 7 
Q1  3  
Q2   3  
Q3    3  
Q4     3 
Q5      3 
Q6       3 
Q7        3 
Q8       3 
Q9      3 
Q10     3 
Q11    3 
Q12   3 
Q13  3 
Q14   3 
Q15    3 

本質上來說,頂級表代表反饋數據是如何存儲的反饋系統。要求多個評論者以0到7的等級評估單個評論者15個問題。我的例子是來自3個審閱者的一組相當不太可能的響應,以便在顯示錶中顯示圖案

第二張表是我想要如何顯示數據。表中的每個「3」表示給定Q#和評級組合的響應計數。例如,對於第5季度,3位審評人員將此人評爲「5」。

顯然,真實的數據會更分散。

我希望這很容易。

感謝,

約翰·安德森

編輯:這是我自己的第一次嘗試:

SELECT * FROM (SELECT SummaryID, COUNT(Q1) AS Q1 FROM SummaryData WHERe SummaryID = 25 
GROUP BY SummaryID) o 
PIVOT (COUNT(Q1) FOR Q1 IN ([0], [1],[2],[3],[4],[5],[6],[7])) p 

SummaryID 0 1 2 3 4 5 6 7 
25   0 0 0 1 0 0 0 0 

我得到一個1下3,這是不對的,我可以不知道如何推斷代碼以包含所有其他Q.

再次感謝,

約翰·安德森

編輯:這裏是我在Excel模型給出的結果會更接近於現實

SummaryID Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 
25   1 4 5 7 4 2 0 2 1 0  2  2  3  5  0 
25   4 1 1 5 6 7 7 4 0 1  3  7  3  1  1 
25   5 3 2 1 7 7 4 0 1 6  7  3  2  7  1 

結果的樣本數據集:

 0 1 2 3 4 5 6 7 
Q1  1   1 1   
Q2  1  1 1    
Q3  1 1   1   
Q4  1    1  1 
Q5     1  1 1 
Q6   1     2 
Q7 1    1   1 
Q8 1  1  1    
Q9 1 2       
Q10 1 1     1  
Q11   1 1    1 
Q12   1 1    1 
Q13   1 2     
Q14  1    1  1 
Q15 1 2       
+4

可能您發佈嘗試 – 2009-09-22 14:22:51

回答

3

你必須UNPIVOT先獲取數據到你需要的格式,然後PIVOT

工作樣本:

SET NOCOUNT ON 

DECLARE @Feedback Table 
(
SummaryId INT, 
Q01 INT, Q02 INT, Q03 INT, Q04 INT, Q05 INT, 
Q06 INT, Q07 INT, Q08 INT, Q09 INT, Q10 INT, 
Q11 INT, Q12 INT, Q13 INT, Q14 INT, Q15 INT 
) 

INSERT INTO @Feedback Values (25, 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 2, 3) 
INSERT INTO @Feedback Values (25, 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 2, 3) 
INSERT INTO @Feedback Values (25, 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 2, 3) 

;WITH ReOrderedData AS 
(
SELECT SummaryId, QuestionNum, Score, COUNT (*) as NumScores FROM 
(
    SELECT SummaryId, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q10, Q11, Q12, Q13, Q14, Q15 
    FROM @Feedback 
) p 
UNPIVOT (Score For QuestionNum IN (Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q10, Q11, Q12, Q13, Q14, Q15)) as UnPvt 
GROUP BY SummaryId, QuestionNum, Score) 
SELECT QuestionNum, 
    IsNull ([0], '') [0], IsNull ([1], '') [1], IsNull ([2], '') [2], IsNull ([3], '') [3], 
    IsNull ([4], '') [4], IsNull ([5], '') [5], IsNull ([6], '') [6], IsNull ([7], '') [7] 
FROM (
SELECT QuestionNum, Score, NumScores 
FROM ReOrderedData 
) As SourceTable 
PIVOT 
(
Max (NumScores) For Score IN ([0], [1], [2], [3], [4], [5], [6], [7]) 
) As Pivotx 
+0

這很好!正是我在找的東西。非常感謝! – JackCroww 2009-09-22 15:40:14

0

不是很優雅,但試試這個:

DECLARE @YourTable table(SummaryID int,Q1 int ,Q2 int ,Q3 int ,Q4 int ,Q5 int ,Q6 int ,Q7 int ,Q8 int ,Q9 int ,Q10 int ,Q11 int ,Q12 int ,Q13 int ,Q14 int ,Q15 int) 

INSERT INTO @YourTable VALUES(25,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4) 
INSERT INTO @YourTable VALUES(25,0,1,2,3,4,5,6,7,6,5,4,3,2,1,0) 
INSERT INTO @YourTable VALUES(25,0,1,2,3,4,5,6,7,6,5,4,3,2,1,0) 
INSERT INTO @YourTable VALUES(25,0,1,2,3,4,5,6,7,6,5,4,3,2,1,0) 


SELECT 
    'Q'+CONVERT(varchar(2),Question) AS Question 
    , CASE WHEN Value0=0 THEN '' ELSE CONVERT(varchar(5),Value0) END AS Value0 
    , CASE WHEN Value1=0 THEN '' ELSE CONVERT(varchar(5),Value1) END AS Value1 
    , CASE WHEN Value2=0 THEN '' ELSE CONVERT(varchar(5),Value2) END AS Value2 
    , CASE WHEN Value3=0 THEN '' ELSE CONVERT(varchar(5),Value3) END AS Value3 
    , CASE WHEN Value4=0 THEN '' ELSE CONVERT(varchar(5),Value4) END AS Value4 
    , CASE WHEN Value5=0 THEN '' ELSE CONVERT(varchar(5),Value5) END AS Value5 
    , CASE WHEN Value6=0 THEN '' ELSE CONVERT(varchar(5),Value6) END AS Value6 
    , CASE WHEN Value7=0 THEN '' ELSE CONVERT(varchar(5),Value7) END AS Value7 
    FROM (
      SELECT 
       Question 
       , ISNULL(SUM(Value0),0) AS Value0 
       , ISNULL(SUM(Value1),0) AS Value1 
       , ISNULL(SUM(Value2),0) AS Value2 
       , ISNULL(SUM(Value3),0) AS Value3 
       , ISNULL(SUM(Value4),0) AS Value4 
       , ISNULL(SUM(Value5),0) AS Value5 
       , ISNULL(SUM(Value6),0) AS Value6 
       , ISNULL(SUM(Value7),0) AS Value7 
       FROM (
         SELECT 
          1 AS Question 
          ,CASE WHEN Q1=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q1=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q1=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q1=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q1=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q1=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q1=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q1=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          2 
          ,CASE WHEN Q2=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q2=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q2=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q2=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q2=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q2=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q2=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q2=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          3 
          ,CASE WHEN Q3=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q3=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q3=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q3=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q3=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q3=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q3=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q3=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          4 
          ,CASE WHEN Q4=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q4=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q4=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q4=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q4=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q4=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q4=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q4=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          5 
          ,CASE WHEN Q5=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q5=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q5=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q5=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q5=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q5=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q5=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q5=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          6 
          ,CASE WHEN Q6=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q6=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q6=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q6=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q6=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q6=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q6=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q6=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          7 
          ,CASE WHEN Q2=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q7=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q7=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q7=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q7=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q7=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q7=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q7=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          8 
          ,CASE WHEN Q8=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q8=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q8=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q8=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q8=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q8=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q8=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q8=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          9 
          ,CASE WHEN Q9=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q9=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q9=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q9=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q9=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q9=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q9=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q9=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          10 
          ,CASE WHEN Q10=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q10=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q10=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q10=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q10=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q10=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q10=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q10=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          11 
          ,CASE WHEN Q11=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q11=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q11=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q11=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q11=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q11=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q11=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q11=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          12 
          ,CASE WHEN Q12=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q12=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q12=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q12=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q12=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q12=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q12=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q12=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          13 
          ,CASE WHEN Q13=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q13=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q13=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q13=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q13=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q13=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q13=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q13=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          14 
          ,CASE WHEN Q14=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q14=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q14=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q14=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q14=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q14=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q14=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q14=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
         UNION ALL 
         SELECT 
          15 
          ,CASE WHEN Q15=0 THEN 1 ELSE 0 END AS Value0 
          ,CASE WHEN Q15=1 THEN 1 ELSE 0 END AS Value1 
          ,CASE WHEN Q15=2 THEN 1 ELSE 0 END AS Value2 
          ,CASE WHEN Q15=3 THEN 1 ELSE 0 END AS Value3 
          ,CASE WHEN Q15=4 THEN 1 ELSE 0 END AS Value4 
          ,CASE WHEN Q15=5 THEN 1 ELSE 0 END AS Value5 
          ,CASE WHEN Q15=6 THEN 1 ELSE 0 END AS Value6 
          ,CASE WHEN Q15=7 THEN 1 ELSE 0 END AS Value7 
          FROM @YourTable 
        ) dt 
       GROUP BY Question 
     )dt2 
    ORDER BY dt2.Question 

OUTPUT:

Question Value0 Value1 Value2 Value3 Value4 Value5 Value6 Value7 
-------- ------ ------ ------ ------ ------ ------ ------ ------ 
Q1  3       1      
Q2    3     1      
Q3      3    1      
Q4       3  1      
Q5         4      
Q6         1  3    
Q7         1    3  
Q8         1     3 
Q9         1    3  
Q10         1  3    
Q11         4      
Q12       3  1      
Q13     3    1      
Q14    3     1      
Q15  3       1      

(15 row(s) affected) 
+0

談論蠻力! :) – 2009-09-22 15:48:44

+0

我們在SQL Server 7中工作了很多年後,每個人都升級了,我有時仍然用一組有限的命令「思考」...... – 2009-09-22 16:06:59