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

私は解決策を見つけました、実際には非常に簡単です!

次のように、ピボットテーブルINTO NewTableの文にコマンドを追加するだけです。SELECT

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 に答える