【发布时间】:2013-11-10 09:46:03
【问题描述】:
有人可以帮我在 mssql 上转换以下内容吗?
ID | PROPERTY_NAME | PROPERTY_VALUE
1 | name1 | value
1 | name2 | value
1 | name3 | value
2 | name4 | value
2 | name2 | value
3 | name6 | value
..
PROPERTY_NAME & PROPERTY_VALUE 是标题,id 有多个“属性”
我想把它转换成:
ID | NAME1 | NAME2 | NAME3 | NAME4 | NAME5 | NAME6 | nameETC...
1 | value | value | value | | | | valueETC...
2 | | value | | value | | | valueETC...
3 | | | | | | value | valueETC...
..
在哪里 NAME1 |名称2 | NAME3 等现在是列标题。
我猜是一个枢轴和一个“从 MycoolTable 中选择不同的 PROPERTY_NAME”,但似乎无法将两者放在一起。
据我所知:(没有 server_id)列和所有地方的所有空值)显然我很愚蠢:D
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct
',' + QUOTENAME(PROPERTY_NAME)
FROM [BSARA_DW_DB].[dbo].[SERVER_PROPERTY]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'');
SET @query = 'SELECT '+ @cols + ' from
(
SELECT SERVER_ID, PROPERTY_NAME, PROPERTY_CHAR_VAL
FROM [BSARA_DW_DB].[dbo].[SERVER_PROPERTY]
) x
pivot
(
MAX(SERVER_ID)
for PROPERTY_CHAR_VAL in (' + @cols + ')
) p ';
execute(@query)
非常感谢, 迈克
【问题讨论】:
-
到目前为止你尝试过什么?你能在 SQL Fiddle sqlfiddle.com 中创建一些东西吗?你提到枢轴你尝试过什么吗:technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
-
用我试过的东西编辑了
标签: sql sql-server tsql dynamic pivot