Сообщение 102, Уровень 15, Состояние 1, Строка 33 Неверный синтаксис рядом с ')' - PullRequest
0 голосов
/ 04 июля 2018

В первый раз я пытаюсь динамический запрос в виде сводной таблицы. Я решаю много ошибок, используя SO. Теперь я застрял в следующей общей ошибке .

Сообщение 102, Уровень 15, Состояние 1, Строка 33 Неверный синтаксис рядом с ')'.

Так что я не могу понять, в чем ошибка ..!

PIVOTEX

create table pivotEx (name varchar(1), mark int, subject varchar(1))

insert into pivotEx values
 ('a', 70,'t')
,('a', 80,'e')
,('b', 60,'t')
,('c', 80,'t')
,('c', 90,'e')
,('c', 40,'m')

Статический запрос (работает нормально)

 select name, [e],[m],[t] from(  
  select name, mark, subject from pivotEx 
 ) f
 pivot
 ( sum(mark) for subject in ([e],[m],[t])
 ) p

Динамический запрос (что я пробую)

declare @col varchar(max)
declare @sql nvarchar(100)
set @col = N''
select @col +=  ',' + col from (select distinct quotename(subject) col from pivotex) colp
select @col=SUBSTRING(@col,2,len(@col))
select  @col
set @sql = 
N'select name, '+@col+' from(  
 select name, mark, subject from pivotEx 
) f
pivot
( sum(mark) for subject in ('+@col+')
) p'

EXEC sp_executesql @sql

Примечание:

  1. Использование SQL Server 2014.
  2. Использование SSMS 2012.
  3. Я новичок в динамическом запросе.

Спасибо

TamilPugal

1 Ответ

0 голосов
/ 04 июля 2018

Вам необходимо изменить @sql тип данных, потому что строка запроса урезана:

declare @sql nvarchar(MAX)

Демоверсия DBFiddle


Рекомендуется печатать ваш запрос с помощью SELECT/PRINT перед выполнением.

PRINT @sql
-- select name, [e],[m],[t] 
   from(select name, mark, subject from pivotEx ) f pivot( sum(mark) for subje
...