将枚举类型和相应的值转换为SQL

时间:2016-09-22 16:20:04

标签: sql sql-server

如果这是重复的话,我不会感到惊讶,但我无法在主题上找到这种变化。

我有一个包含两列的表:一列表示数据类型,另一列表示相应的值。我想使用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

我知道为什么会失败,但我不知道如何让它按照我的意愿运作。

1 个答案:

答案 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