2016-05-23 2 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; 

Я попытался типичный
SELECT * INTO Новая_таблица FROM (подзапрос) Но это не сработало. Я получаю ошибки «Msg 156, уровень 15, состояние 1, строка 416 Неверный синтаксис рядом с ключевым словом« DECLARE ». Msg 102, уровень 15, состояние 1, строка 432 Неверный синтаксис рядом с«) ».

Я также пробовал изменить этот раздел так: SELECT @columns + = N ', p.' + QUOTENAME (COMMON_NAME) INTO sp_pivot FROM (SELECT p.COMMON_NAME FROM eBird AS p GROUP BY p.COMMON_NAME) AS x;

Но, я получаю эту ошибку:
Msg 194, уровень 15, состояние 1, строка 419 оператор SELECT INTO оператор не может содержать ЗЕЬЕСТ, который присваивает значения переменной.

Я потратил немало времени, пытаясь понять это, посмотрев предыдущие вопросы и был бы признателен за любую помощь. Спасибо.

ответ

0

следующих работ на 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; 

Версия от 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 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^