📜  SQL Server 动态透视未知列数 - SQL (1)

📅  最后修改于: 2023-12-03 15:05:17.793000             🧑  作者: Mango

SQL Server 动态透视未知列数 - SQL

在某些情况下,我们需要使用透视(Pivot)表来转换表格中的行和列。但是,如果我们不知道要透视的列数或者列的值是未知的,该怎么办呢?在这种情况下,我们需要使用动态透视来解决这个问题。

解决方案

首先,我们需要使用动态 SQL 来构建我们的透视查询语句。我们可以使用 SELECT DISTINCT 语句来获取所有可能的列值,并将它们插入到一个临时表中。

CREATE TABLE #tempCols (column_name VARCHAR(MAX))
DECLARE @sql VARCHAR(MAX)
SET @sql = 'INSERT INTO #tempCols(column_name) SELECT DISTINCT column_name FROM YourTable'
EXEC (@sql)

接下来,我们需要使用这些列名来构建我们的透视查询语句。我们可以使用 COALESCE 函数来动态地构建我们的列名列表。

DECLARE @cols VARCHAR(MAX)
SELECT @cols = COALESCE(@cols + ', ','') + '[' + column_name + ']'
FROM #tempCols

SET @sql = 'SELECT *
FROM (SELECT * FROM YourTable) AS tbl
PIVOT (MAX(column_value) FOR column_name IN (' + @cols + ')) AS pvt'

EXEC (@sql)

注意,在上面的代码中,我们动态地构建了我们的列名列表并将其插入到我们的透视查询语句中。最后,我们再使用 EXEC 函数来执行这个查询语句。

总结

使用动态透视可以帮助我们在不知道要透视的列数或者列的值是未知的情况下构建透视查询语句。我们需要使用动态 SQL 来构建我们的透视查询语句,并使用 COALESCE 函数来动态地构建我们的列名列表。然后再使用 EXEC 函数来执行这个查询语句。