所以我有一个包含Name
列的表格,以及Value
和ID
的列。同一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]
我一直在玩PIVOT
和UNPIVOT
但没有得到我需要的东西。
答案 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搜索(使用弹性搜索),以便能够轻松搜索此数据。