Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Неправильный синтаксис около ключевого слова "SET".  [new]
Kontox
Member

Откуда:
Сообщений: 122
делаю запрос
 DECLARE @Start datetime = '20180101'
DECLARE @MonthList varchar(max)

;With Monthdates
AS
(
SELECT @Start AS Dt,FORMAT(@Start,'MMM-yyyy') AS DispDt
UNION ALL
SELECT DATEADD(mm,1,Dt),FORMAT(DATEADD(mm,1,Dt),'MMM-yyyy')
FROM Monthdates
WHERE DATEADD(mm,1,Dt) <= GETDATE()
)



SET @MonthList=STUFF((SELECT ',[' + DispDt + ']' FROM Monthdates ORDER BY Dt FOR XML PATH('')),1,1,'')

DECLARE @SQL varchar(max) ='SELECT shop_code,product_id,'+ @MonthList + '
FROM
(
select f1.shop_code,f1.product_id,coalesce(f2.returned,0) * 100.0/f1.shipped as returnperc,FORMAT(f1.month_date,''MMM-yyyy'') AS MonthDate
from(
select shop_code,product_id,
dateadd(mm,datediff(mm,0,doc_date),0) as monthdate,
sum(ship_count) as shipped
from final4 
group by shop_code,
product_id,
datediff(mm,0,doc_date)
)f1
left join (
select shop_code,product_id,
dateadd(mm,datediff(mm,0,doc_date),0) as monthdate,
sum(return_count) as returned
from final4 
group by shop_code,
product_id,
datediff(mm,0,doc_date)
)f2
on f2.shop_code = f1.shop_code
and f2.product_id = f1.product_id
and f2.monthdate = f1.monthdate
)tPIVOT(MAX(ReturnPerc) FOR MonthDate IN (' + @MonthList + '))p'

EXEC (@SQL)


выходит ошибка
Неправильный синтаксис около ключевого слова "SET".
Как исправить, подскажите, плиз.
6 фев 19, 15:26    [21802783]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис около ключевого слова "SET".  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 35965
print @sql
6 фев 19, 15:30    [21802788]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис около ключевого слова "SET".  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 35965
;With Monthdates
AS
(
SELECT @Start AS Dt,FORMAT(@Start,'MMM-yyyy') AS DispDt
UNION ALL
SELECT DATEADD(mm,1,Dt),FORMAT(DATEADD(mm,1,Dt),'MMM-yyyy')
FROM Monthdates
WHERE DATEADD(mm,1,Dt) <= GETDATE()
)



select @MonthList=STUFF((SELECT ',[' + DispDt + ']' FROM Monthdates ORDER BY Dt FOR XML PATH('')),1,1,'')
6 фев 19, 15:32    [21802794]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис около ключевого слова "SET".  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 931
Kontox,


)tPIVOT(MAX(ReturnPerc) FOR MonthDate IN (' + @MonthList + '))p'


и еще потом вот это сразу в глаза кидается
6 фев 19, 17:01    [21802903]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис около ключевого слова "SET".  [new]
Kontox
Member

Откуда:
Сообщений: 122
felix_ff , а что в этой строчке не то
Гавриленко Сергей Алексеевич , если я поменяю SET на Select
получаю ошибку
Сообщение 102, уровень 15, состояние 1, строка 131
Неправильный синтаксис около конструкции "(".

в моем случае ,речь идет про это место
DECLARE @SQL varchar(max) ='SELECT shop_code,product_id,'+ @MonthList + '
FROM
( select f1.shop_code,f1.product_id,coalesce(f2.returned,0) * 100.0/f1.shipped as returnperc,FORMAT(f1.month_date,''MMM-yyyy'') AS MonthDate
from(
6 фев 19, 17:13    [21802912]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис около ключевого слова "SET".  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 931
Kontox,

pivot надо пробелом разделять

DECLARE @Start datetime = '20180101'
DECLARE @MonthList varchar(max)

;With Monthdates
AS
(
SELECT @Start AS Dt,FORMAT(@Start,'MMM-yyyy') AS DispDt
UNION ALL
SELECT DATEADD(mm,1,Dt),FORMAT(DATEADD(mm,1,Dt),'MMM-yyyy')
FROM Monthdates
WHERE DATEADD(mm,1,Dt) <= GETDATE()
),
X (xdata) AS (
SELECT ',[' + DispDt + ']' FROM Monthdates ORDER BY Dt FOR XML PATH('')
)
SELECT @MonthList=STUFF(xdata, 1, 1,'')
FROM X;

DECLARE @SQL varchar(max) ='SELECT shop_code,product_id,'+ @MonthList + '
FROM
(
select f1.shop_code,f1.product_id,coalesce(f2.returned,0) * 100.0/f1.shipped as returnperc,FORMAT(f1.month_date,''MMM-yyyy'') AS MonthDate
from(
select shop_code,product_id,
dateadd(mm,datediff(mm,0,doc_date),0) as monthdate,
sum(ship_count) as shipped
from final4 
group by shop_code,
product_id,
datediff(mm,0,doc_date)
)f1
left join (
select shop_code,product_id,
dateadd(mm,datediff(mm,0,doc_date),0) as monthdate,
sum(return_count) as returned
from final4 
group by shop_code,
product_id,
datediff(mm,0,doc_date)
)f2
on f2.shop_code = f1.shop_code
and f2.product_id = f1.product_id
and f2.monthdate = f1.monthdate
)t PIVOT(MAX(ReturnPerc) FOR MonthDate IN (' + @MonthList + '))p'

EXEC (@SQL)
6 фев 19, 17:56    [21802954]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис около ключевого слова "SET".  [new]
Kontox
Member

Откуда:
Сообщений: 122
Я тоже так подумал, после того как я убрал пробелы, после запуска запроса, стала появляться такая ошибка

Сообщение 207, уровень 16, состояние 1, строка 122
Недопустимое имя столбца "return_count".
Сообщение 207, уровень 16, состояние 1, строка 109
Недопустимое имя столбца "month_date".

но ведь эти столбцы есть
6 фев 19, 18:16    [21802977]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис около ключевого слова "SET".  [new]
nullin
Member

Откуда: pullin
Сообщений: 33
Kontox, как минимум вот в чем дело, во втором случае, думаю тоже самое.
DECLARE @SQL varchar(max) ='SELECT shop_code,product_id,'+ @MonthList + '
FROM
(
select f1.shop_code,f1.product_id,coalesce(f2.returned,0) * 100.0/f1.shipped as returnperc,FORMAT(f1.month_date,''MMM-yyyy'') AS MonthDate
from(
select shop_code,product_id,
dateadd(mm,datediff(mm,0,doc_date),0) as monthdate,
sum(ship_count) as shipped
from final4 
group by shop_code,
product_id,
datediff(mm,0,doc_date)
)f1
6 фев 19, 19:28    [21803028]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис около ключевого слова "SET".  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27704
Kontox
но ведь эти столбцы есть
Чего гадать, сделайте уже print, как сразу посоветовали.
6 фев 19, 20:40    [21803075]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис около ключевого слова "SET".  [new]
Kontox
Member

Откуда:
Сообщений: 122
Спасибо, разобрался, заработало:)
7 фев 19, 15:01    [21803573]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить