Tsql T-SQL数据透视?从行值创建表列的可能性

Tsql T-SQL数据透视?从行值创建表列的可能性,tsql,pivot,database-table,Tsql,Pivot,Database Table,实际上是否可以旋转T-SQL(2005),以便(为了参数起见)第一列行的值成为输出表列的标题 我意识到这并不是PIVOT的真正用途,而是我所需要的——能够请求一个表,其中的列以前不知道,因为它们已作为值输入到表中 即使是黑客也不错,tbh。伊齐克·本·甘关于如何构建动态轴心的例子,我强烈推荐他的书 稍微好一点的pivot查询如下所示: -- Static PIVOT WITH PivotData AS ( SELECT custid, YEAR(orderdate) AS orderyear,

实际上是否可以旋转T-SQL(2005),以便(为了参数起见)第一列行的值成为输出表列的标题

我意识到这并不是PIVOT的真正用途,而是我所需要的——能够请求一个表,其中的列以前不知道,因为它们已作为值输入到表中


即使是黑客也不错,tbh。

伊齐克·本·甘关于如何构建动态轴心的例子,我强烈推荐他的书


稍微好一点的pivot查询如下所示:

-- Static PIVOT
WITH PivotData AS
(
SELECT custid, YEAR(orderdate) AS orderyear, qty
FROM dbo.Orders
)
SELECT custid, [2002], [2003], [2004]
FROM PivotData
PIVOT(SUM(qty) FOR orderyear IN([2002],[2003],[2004])) AS P;

与派生表相比,我更喜欢公共表表达式(CTE)的样式,因为我认为它更容易理解。伊兹克也这样做,因为他在《查询Microsoft SQL Server 2012》一书中推荐了这种风格。

倒数第二行必须是EXEC(@SQL)@JohnnyBones,你为什么会这样认为
EXEC sp_executesql@sql
语法正确。如果您尝试
EXEC(@sql)
,它将失败,因为它将尝试查找包含该文本的存储过程。
-- Static PIVOT
WITH PivotData AS
(
SELECT custid, YEAR(orderdate) AS orderyear, qty
FROM dbo.Orders
)
SELECT custid, [2002], [2003], [2004]
FROM PivotData
PIVOT(SUM(qty) FOR orderyear IN([2002],[2003],[2004])) AS P;