2016-05-23 2 views
0

Ich versuche, eine neue Tabelle aus den Ergebnissen des dynamischen Drehpunkts unten zu erstellen. Die Abfrage selbst funktioniert einwandfrei.Wie erstellt man eine feste Tabelle aus einem dynamischen Pivot in 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; 

habe ich versucht, die typische
SELECT * INTO newtable FROM (Unterabfrage) Aber das hat nicht funktioniert. Ich erhalte die Fehler "Nachricht 156, Ebene 15, Status 1, Zeile 416 Falsche Syntax in der Nähe des Schlüsselwortes" DECLARE ". Msg 102, Ebene 15, Status 1, Zeile 432 Falsche Syntax in der Nähe von ')'."

Ich habe auch versucht, diesen Abschnitt so zu ändern: SELECT @columns + = N ', p.' + QUOTENAME (COMMON_NAME) IN sp_pivot FROM (SELECT p.COMMON_NAME VON eBird AS p GROUP BY p.COMMON_NAME) AS x;

Aber ich bekomme diese Fehlermeldung:
Msg 194, Ebene 15, Status 1, Zeile 419 Eine SELECT INTO-Anweisung nicht eine SELECT-Anweisung, die einer Variablen Werte zuordnet enthalten kann.

Ich habe viel Zeit damit verbracht, dies herauszufinden, indem ich mir vorherige Fragen angesehen habe und würde mich über jede Hilfe freuen. Vielen Dank.

Antwort

0

Die folgenden Arbeiten auf MS SQL 2014.

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; 

Version von 2008 R2, das funktioniert:

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; 
Verwandte Themen