【发布时间】:2013-01-24 16:27:45
【问题描述】:
您好,我有以下数据表
Class | Member | Value
----------------------
c1 | m1 | 10
c1 | m2 | 20
c1 | list | 30
c1 | list | 40
c1 | list | 50
c2 | m1 | 60
c2 | m2 | 70
c2 | list | 80
并希望将数据转换为这种形式
Class | Member 1 | Member 2 | List
----------------------------------
c1 | 10 | 20 | 30
c1 | 10 | 20 | 40
c1 | 10 | 20 | 50
c2 | 60 | 70 | 80
使用 max 作为聚合函数的正常枢轴会给我
Class | Member 1 | Member 2 | List
----------------------------------
c1 | 10 | 20 | 50
c2 | 60 | 70 | 80
但我希望列出任何类的每个 List 值。
不是通过编写充满 CASE 的 SQL 查询来寻找替代方案,例如 CASE Member WHEN 'm1' then Value, CASE Member WHEN 'm2' then Value, ... 为了实现我想要的,我想知道是否有任何是否有机会使用 pivot 并进行一些调整以使其适用于我的任务?
数据库是 SQL 2008 R2
谢谢
【问题讨论】:
-
对于每个
Class值,是否只有一行(并且恰好是一行)m1和m2? -
是的,成员固定为 m1, m2, ..., m99 和 list。使用 PIVOT 可以帮助我不要为每个案例编写 100 个 CASE 或 JOIN。