将列转换为行的SQL Server

3

这是我的数据:

enter image description here

我想要这个结果:

enter image description here

请注意,“App”列中插入的值没有相同的值或相同的数量,因此有时可以找到2行,另一次可能会找到10行


我尝试使用你的示例,但如果我使用它,我必须指定“app”可以存储的所有值,并且在未来,它们将超过1000个。 - img.simone
谢谢您提供的“SQL Server动态PIVOT”。您能帮我编写代码吗? - img.simone
1个回答

3

您可以使用临时表来存储应用程序的值,然后将它们连接到一个变量中。最后,使用T-SQL语句构建动态数据透视表:

CREATE TABLE #VALS (VALS NVARCHAR(MAX))

INSERT INTO #VALS
SELECT DISTINCT APP
FROM [TABLE1]

DECLARE @SQL NVARCHAR(MAX)
DECLARE @VALS NVARCHAR(MAX)

SELECT @VALS = COALESCE(@VALS+', ','') + '[' + VALS + ']' FROM #VALS

SET @SQL = '
SELECT NAME, '+@VALS+'
FROM [TABLE1]
PIVOT (MAX([VERSION]) FOR APP IN ('+@VALS+')) PIV'
PRINT @SQL
EXEC (@SQL)

只是提醒一下,如果您的APP列不是唯一的,那么这将只按预期工作。否则它会尝试将您的版本号相加...编辑:我很偏执,所以我已经将透视子句从SUM更改为MAX,但是如果您的APP值不是唯一的,这仍然不会按照您的想法工作。 - John Bell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接