2016-05-23 8 views
0

以下の動的ピボットの結果から新しいテーブルを作成しようとしています。クエリ自体は正常に動作します。SQLの動的ピボットから固定テーブルを作成する方法は?

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX); 
SET @columns = N''; 
SELECT @columns += N', p.' + QUOTENAME(COMMON_NAME) 
FROM (SELECT p.COMMON_NAME FROM eBird AS p 
GROUP BY p.COMMON_NAME) AS x; 
SET @sql = N' 
SELECT SAMP_EVENT_ID, ' + STUFF(@columns, 1, 2, '') + ' 
FROM 
(SELECT SAMP_EVENT_ID, COMMON_NAME, SUM(IIF(OBS_COUNT IS NULL, 0, 1)) AS  
Pres 
FROM eBird GROUP BY SAMP_EVENT_ID, COMMON_NAME) AS j 
PIVOT 
(SUM(Pres) FOR COMMON_NAME IN (' 
+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '') + ')) AS p;'; 
PRINT @sql; 
EXEC sp_executesql @sql; 

私は(サブクエリ) FROM NEWTABLE INTO典型的な
SELECT *を試してみましたが、しかし、それは動作しませんでした。私は、エラー "Msg 156、レベル15、状態1、行416 " DECLARE "キーワードの近くの構文が正しくありません。メッセージ102、レベル15、状態1、行432 ')'

また、このセクションを次のように変更してみました: SELECT @columns + = N '、p。' + QUOTENAME(COMMON_NAME) INTO sp_pivot FROM(eBird ASからp.COMMON_NAMEを選択してください。 GROUP BY p.COMMON_NAME)AS x;
メッセージ194、レベル15、状態1、行 A SELECT INTO文が変数に値を代入するSELECTステートメントを含めることはできません419:

はしかし、私はこのエラーを取得します。

私は以前の質問を見てこれを理解しようとかなりの時間を費やしており、助けていただければ幸いです。ありがとうございました。

答えて

0

以下は、作品2008 R2からバージョン

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX); 
SET @columns = N''; 
SELECT @columns += N', p.' + QUOTENAME(COMMON_NAME) 
FROM (SELECT p.COMMON_NAME FROM eBird AS p 
GROUP BY p.COMMON_NAME) AS x; 
SET @sql = N' 
SELECT SAMP_EVENT_ID, ' + STUFF(@columns, 1, 2, '') + ' into NewTable 
FROM 
(SELECT SAMP_EVENT_ID, COMMON_NAME, SUM(IIF(OBS_COUNT IS NULL, 0, 1)) AS  
Pres 
FROM eBird GROUP BY SAMP_EVENT_ID, COMMON_NAME) AS j 
PIVOT 
(SUM(Pres) FOR COMMON_NAME IN (' 
+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '') + ')) AS p;'; 
PRINT @sql; 
EXEC sp_executesql @sql; 

2014 MS SQL上で動作します:

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX); 
SET @columns = N''; 
SELECT @columns += N', p.' + QUOTENAME(COMMON_NAME) 
FROM (SELECT p.COMMON_NAME FROM eBird AS p 
GROUP BY p.COMMON_NAME) AS x; 
SET @sql = N' 
SELECT SAMP_EVENT_ID, ' + STUFF(@columns, 1, 2, '') + ' into NewTable2 
FROM 
(SELECT SAMP_EVENT_ID, COMMON_NAME, SUM(case when OBS_COUNT is null then 0 else 1 end) AS  
Pres 
FROM eBird GROUP BY SAMP_EVENT_ID, COMMON_NAME) AS j 
PIVOT 
(SUM(Pres) FOR COMMON_NAME IN (' 
+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '') + ')) AS p;'; 
PRINT @sql; 
EXEC sp_executesql @sql; 
関連する問題