【发布时间】:2015-04-16 16:19:39
【问题描述】:
以下代码几乎可以满足我的需求,除了我应该动态生成列 (p1,p2,p3...) 并且我不能使用数据透视表(请参阅 SQL Transpose rows to columns (group by key variable))。
我现在在 SQL Server 2008 中使用的是什么:
Select InvoiceNum,
Max(Case when seq =0 Then product_Description end) as p1,
Max(Case when seq =1 Then product_Description end) as p2
From
( Select InvoiceNum, Product_Description,
Row_Number() Over(Partition by InvoiceNum
Order by InvoiceNum) - 1 seq
From #tmpTable
)d
Group by InvoiceNum
感谢 StackOverFlow 社区!!
【问题讨论】:
-
您需要使用动态 sql。您链接到的问题包括如何执行此操作的示例。哦,您可以为此使用 PIVOT。
-
我在“PIVOT”附近收到“语法错误”。您可能需要将当前数据库的兼容级别设置为更高的值才能启用此功能。请参阅 ALTER DATABASE 的 SET COMPATIBILITY_LEVEL 选项的帮助。'
-
我没有权限这样做。
-
您是否尝试过像链接中的示例那样编写任何动态sql?
-
您可以将其作为交叉表来执行。无论如何,我更喜欢 PIVOT。它稍微快一点,更容易阅读恕我直言,即使在旧版兼容级别下也能工作。 sqlservercentral.com/articles/T-SQL/63681sqlservercentral.com/articles/Crosstab/65048
标签: sql-server tsql pivot transpose