2014-11-05 56 views
1

我有一張表格,裏面充滿了調查數據,我需要將其轉換爲一個不錯的彙總表。調查問題是(例如)「按順序排列餐廳偏好」。原始數據是這樣的:SQL將原始數據轉換爲彙總表?

CUST_ID WENDYS_RANK MCDONALDS_RANK BURGERKING_RANK 
    1   First   Third   Second 
    2   Second   First   Third 
    3   None   First   Second 
    4   Second   Third   First 
(repeat for 100,000+ records) 

我需要把它變成一個漂亮的表,看起來像:

NAME  NUM_FIRST  NUM_SECOND  NUM_THIRD 
Wendys  1    2     0 
McDonalds 2    0     2 
BK   1    2     1 

但它已經這麼混賬長時間,因爲我不喜歡這個,我不僅忘了轉型如何編寫SQL,我忘記了這個轉換被稱爲什麼,這使得很難谷歌。誰能幫我?

謝謝...

+0

哪些DBMS您使用的? Postgres的?甲骨文? – 2014-11-05 22:41:49

+0

我認爲你需要以某種方式使用PIVOT。 – Alex 2014-11-05 23:42:19

回答

1

下面是一個方法:

select 'Wendys', 
     sum(case when Wendys_Rank = 'First' then 1 else 0 end) as Rank1, 
     sum(case when Wendys_Rank = 'Second' then 1 else 0 end) as Rank2, 
     sum(case when Wendys_Rank = 'Third' then 1 else 0 end) as Rank3 
from surveydata 
union all 
select 'McDonalds', 
     sum(case when McDonalds_Rank = 'First' then 1 else 0 end) as Rank1, 
     sum(case when McDonalds_Rank = 'Second' then 1 else 0 end) as Rank2, 
     sum(case when McDonalds_Rank = 'Third' then 1 else 0 end) as Rank3 
from surveydata 
union all 
select 'BK', 
     sum(case when BK_Rank = 'First' then 1 else 0 end) as Rank1, 
     sum(case when BK_Rank = 'Second' then 1 else 0 end) as Rank2, 
     sum(case when BK_Rank = 'Third' then 1 else 0 end) as Rank3 
from surveydata; 
+0

正是我需要的!非常感謝! – user3120173 2014-11-05 23:37:51