SQL将原始数据转换为汇总表?

时间:2014-11-05 22:41:09

标签: sql database

我有一个充满调查数据的表格,我需要将其转换为一个很好的汇总表格。调查问题是(例如)“按顺序排列您的餐厅偏好”。原始数据如下所示:

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,我忘记了这个转换被称为什么,这让谷歌变得很难。谁能帮我?

...谢谢

1 个答案:

答案 0 :(得分: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;