【问题标题】:convert columns to rows sql server [duplicate]将列转换为行sql server [重复]
【发布时间】:2015-07-01 07:04:15
【问题描述】:

这些是我的数据:

我想得到这个结果:

请注意,插入“App”列的值没有相同的值或相同的数量,所以一次我可以找到 2 行,另一次找到 10 行

【问题讨论】:

  • 我用你的例子试过了,但是如果我使用它,我必须指定“app”可以存储的所有值,并且将来它们将超过1000
  • 感谢您的“SQL Server dynami PIVOT”。你能帮我写代码吗?

标签: sql-server row calculated-columns


【解决方案1】:

您可以使用临时表来存储您的应用程序值,然后将它们连接到一个变量中。最后使用 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 列不同时,这才会按预期工作。否则它会尝试将你的版本号加在一起......编辑:我很偏执,所以我已经将 pivot 子句从 SUM 更改为 MAX,但是如果你的 APP 值不明显,这仍然不会像你想象的那样工作。
猜你喜欢
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2021-02-24
  • 2010-10-22
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多