SQL Server转置,将FieldValues作为FieldNames:
大家好, 我对所有人都有一个棘手的要求。
我有一张包含以下数据的表
Field1 Field2 Field3 Field4
----------------------------------------------------
KEY1 01 FieldName1 FieldValue1
kEY1 01 FieldName2 FieldValue2
KEY1 01 FieldName3 FieldValue3
KEY1 01 FieldName4 FieldValue4
我可以使用数据透视进行转置,但是我希望结果是
Filed1 Field2 FieldName1 FieldName2 FieldName3 FieldName4
--------------------------------------------------------------------
KEY1 01 FieldValue1 FieldValue2 FieldValue3 FieldValue4
是否可以使用数据透视表而不使用XML?
谢谢。
答案 0 :(得分:0)
您可以尝试使用条件汇总功能
SELECT Field1,
Field2,
MAX(CASE WHEN Field3 = 'FieldName1' THEN Field4 END) FieldName1,
MAX(CASE WHEN Field3 = 'FieldName2' THEN Field4 END) FieldName2,
MAX(CASE WHEN Field3 = 'FieldName3' THEN Field4 END) FieldName3,
MAX(CASE WHEN Field3 = 'FieldName4' THEN Field4 END) FieldName4
FROM T
GROUP BY Field1,Field2
如果要动态创建列,可以尝试使用动态数据透视。
创建SQL语句,并通过连接SQL字符串使条件聚合函数。然后使用动态执行。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ', MAX(CASE WHEN Field3 = ''' + Field3+''' THEN Field4 END) ' + QUOTENAME(Field3)
FROM T
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query= 'SELECT Field1,
Field2, '+ @cols+ '
FROM T
GROUP BY Field1,Field2';
execute(@query)
结果
Filed1 Field2 FieldName1 FieldName2 FieldName3 FieldName4
--------------------------------------------------------------------
KEY1 01 FieldValue1 FieldValue2 FieldValue3 FieldValue4