无法获取SQL查询以将相同ID的列中的值转换为具有各自列的单个行

时间:2015-11-06 22:36:27

标签: sql database oracle pivot

以下是表格数据的示例

ID attribute_name  attribute_value
1  attr1           val1
1  attr2           val2
1  attr3           val3
2  attr1           val4
2  attr2           val5
2  attr3           val6

以下是我希望查询输出为

的内容
ID  attr1 attr2 attr3
1   val1  val2  val3
2   val4  val5  val6

我尝试过这样的事情:Merge multiple rows with same ID into one row,但我无法获得针对具体案例所需的结果。

我真的没有像以前那样分享好的SQL作为起点,因为我真的需要从头开始。我希望有人可以帮助我。

2 个答案:

答案 0 :(得分:2)

PIVOT绝对是您的答案。 https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

Pivot根据另一个值获取并聚合一个值。

DECLARE @Temp TABLE(ID INT, attribute_name VARCHAR(25), attribute_value VARCHAR(25))
INSERT INTO @Temp
VALUES(1, 'attr1', 'val1'), 
(1, 'attr2', 'val2'), 
(1, 'attr3', 'val3'), 
(2, 'attr1', 'val4'), 
(2, 'attr2', 'val5'), 
(2, 'attr3', 'val6')

SELECT *
    FROM (
        SELECT ID, attribute_name, attribute_value
            FROM @Temp
        ) p
        PIVOT
        (
            MAX(attribute_value)
            FOR attribute_name IN
            (attr1, attr2, attr3)
        ) AS pvt
            ORDER BY pvt.ID

答案 1 :(得分:0)

首先,通常id - 是唯一标识行的字段,第二个 - 只需将包含attr1,attr2等的表作为列。