如何选择两列(Name,Value)并返回单个结果?

时间:2015-02-04 21:05:08

标签: sql sql-server tsql

所以我有一个包含Name列的表格,以及ValueID的列。同一ID可以有多行。我想创建一个select,它将为每个ID返回一行,Name列中的值将是列名,Value将是值。例如:

CREATE TABLE dbo.Attribute
(
    AttributeID int NOT NULL,
    Name varchar(20) NOT NULL,

    Value varchar(20) NOT NULL
   ) ;

数据:

{1,"Color", "Blue"},{1,"Material", "leather"}

希望选择返回:

[AttributeID:1, Color:Blue, Material: leather]

我一直在玩PIVOTUNPIVOT但没有得到我需要的东西。

1 个答案:

答案 0 :(得分:1)

感谢@ Mihai的链接。我能够做我

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.Name) 
            FROM VariantAttribute c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT variantid, ' + @cols + ' from 
            (
                select variantid
                    , Name
                    , value
                from VariantAttribute
           ) x
            pivot 
            (
                 max([Value])
                for Name in (' + @cols + ')
            ) p '


execute(@query)

在我对如何存储这些数据变得更加松懈之前。目前还没有办法,但此查询是将此数据推送到Azure搜索(使用弹性搜索),以便能够轻松搜索此数据。