0

我设法应用您建议的 PIVOT 语句将表记录的值自动转置为列:

DECLARE @PivotColumnas VARCHAR(MAX) 
SELECT    @PivotColumnas = COALESCE (@PivotColumnas + ',[' + IB_PDSBATCHATTRIBIDBI + ']', '[' + IB_PDSBATCHATTRIBIDBI + ']') FROM PDSBATCHATTRIB

DECLARE @PivotTablaSQL NVARCHAR(MAX)
 SET  @PivotTablaSQL = N' SELECT * 
FROM (SELECT INVENTBATCHID, ITEMID, PDSBATCHATTRIB.IB_PDSBATCHATTRIBIDBI, PDSBATCHATTRIBVALUE FROM PDSBATCHATTRIBUTES
  LEFT JOIN PDSBATCHATTRIB ON PDSBATCHATTRIBUTES.IB_PDSBATCHATTRIBIDBI = PDSBATCHATTRIB.IB_PDSBATCHATTRIBIDBI) AS TablaOrigen
 PIVOT
 (MIN(PDSBATCHATTRIBVALUE)
 FOR IB_PDSBATCHATTRIBIDBI IN ('+ @PivotColumnas + ')) AS PivotTable' 

EXECUTE (@PivotTablaSQL)

我需要的是如何将结果保存为查询或从此查询创建表。如果我尝试将结果另存为查询,则会收到以下错误:

关键字“DECLARE”附近的语法不正确。

谢谢!

4

2 回答 2

0

因为它是动态 sql,并且您不知道确切的列,所以可以使用 SELECT ... INTO #TempPivot。它正在创建一个您以后可以使用的临时表,或者尝试构建一个可以选择临时表结构并创建表的动态解决方案,但这似乎有点矫枉过正。

于 2012-08-24T18:10:22.983 回答
0

我找到了解决办法,其实很简单!

我只需要在数据透视表INTO NewTableSELECT句子中添加命令,就像这样:

SET  @PivotTablaSQL = N' SELECT * **INTO NewTable** 
FROM (SELECT INVENTBATCHID, ITEMID, PDSBATCHATTRIB.IB_PDSBATCHATTRIBIDBI,   PDSBATCHATTRIBVALUE FROM PDSBATCHATTRIBUTES 
LEFT JOIN PDSBATCHATTRIB ON PDSBATCHATTRIBUTES.IB_PDSBATCHATTRIBIDBI =  PDSBATCHATTRIB.IB_PDSBATCHATTRIBIDBI) AS TablaOrigen 
PIVOT 
(MIN(PDSBATCHATTRIBVALUE) 
FOR IB_PDSBATCHATTRIBIDBI IN ('+ @PivotColumnas + ')) AS PivotTable' 

这将在 SQL 数据库中使用数据透视表结果创建一个新表。谢谢大家!

于 2012-08-27T06:16:58.983 回答