2015-04-23 116 views
3

这些都是我的数据:转换列行的SQL Server

enter image description here

,我想有这样的结果:

enter image description here

请注意,该值插入列“应用程序“,没有得到相同的值或相同的数量,所以一旦我可以找到2行和另一次10行

+0

我与你的榜样试过,但如果我使用它,我必须指定所有的值是“应用程序”,可存储,在未来,他们将超过1000 –

+0

感谢您使用“SQL Server dynami PIVOT”。你能帮我解码吗? –

回答

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, '[email protected]+' 
FROM [TABLE1] 
PIVOT (MAX([VERSION]) FOR APP IN ('[email protected]+')) PIV' 
PRINT @SQL 
EXEC (@SQL) 
+0

请注意这一点。如果您的APP列不同,这只会按预期工作。否则它会尝试将您的版本号加在一起... 编辑:我是偏执狂,所以我已经将SUM子句从SUM更改为MAX,但是如果您的APP值不是不同。 –