如果这是重复的话,我不会感到惊讶,但我无法在主题上找到这种变化。
我有一个包含两列的表:一列表示数据类型,另一列表示相应的值。我想使用SELECT转换它,以便每个枚举的“类型”是由值填充的自己的列。
Table PersonInfo
InfoID PersonID AttributeType AttributeValue
1 1 email bob@example.com
2 1 dept research
3 2 email judy@example.com
4 2 dept engineering
5 3 email frank@example.com
SELECT结果将是:
PersonID email dept
1 bob@example.com research
2 judy@example.com engineering
3 frank@example.com NULL
如您所见,不再需要InfoID索引。
就我而言,我知道AttributeType列中的潜在值,所以我不需要它是完全动态的。
以下是我的尝试:
SELECT DISTINCT PersonID,
CASE AttributeType WHEN 'email' THEN AttributeValue ELSE null END as email
CASE AttributeType WHEN 'dept' THEN AttributeValue ELSE null END as dept
我知道为什么会失败,但我不知道如何让它按照我的意愿运作。
答案 0 :(得分:1)
select
personid,
max(case when attributetype='email' then AttributeValue end) email,
max(case when attributetype='dept' then AttributeValue end) dept
from
table
group by personid