2012-08-24 207 views
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) 

我需要的是如何保存的結果作爲從這個查詢中查詢或創建一個表。如果我試圖保存結果作爲查詢,我得到以下錯誤:

Incorrect syntax near the keyword 'DECLARE'.

謝謝!

+0

你不清楚你在哪裏得到一個錯誤。你如何使用上面的代碼?你能提供更多細節嗎? – Taryn

+0

此代碼粘貼到SQL Server Management Studio的新視圖中。如果我執行查詢,結果會顯示在「結果」窗格中,但如果我嘗試保存它,則會顯示帶有以前錯誤的消息。 – Raul

回答

0

我找到了解決方案,其實很簡單!

我只需要在SELECT句子添加命令INTO NewTable OOF數據透視表,就像這樣:

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數據庫此創建新表。 謝謝大家!

0

因爲它是一個動態sql,並且您不知道確切的列,所以可以使用SELECT ... INTO #TempPivot。它正在創建一個臨時表,稍後您可以使用它,或者嘗試構建一個動態解決方案,該解決方案可以選擇臨時表的結構並創建表,但看起來有點矯枉過正。