Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Неправильный синтаксис около ключевого слова "SET". / 10 сообщений из 10, страница 1 из 1
06.02.2019, 15:26
    #39770217
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
делаю запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
 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".
Как исправить, подскажите, плиз.
...
Рейтинг: 0 / 0
06.02.2019, 15:30
    #39770221
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
print @sql
...
Рейтинг: 0 / 0
06.02.2019, 15:32
    #39770223
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
;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,'')
...
Рейтинг: 0 / 0
06.02.2019, 17:01
    #39770299
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
Kontox,


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


и еще потом вот это сразу в глаза кидается
...
Рейтинг: 0 / 0
06.02.2019, 17:13
    #39770306
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
felix_ff , а что в этой строчке не то
Гавриленко Сергей Алексеевич , если я поменяю SET на Select
получаю ошибку
Сообщение 102, уровень 15, состояние 1, строка 131
Неправильный синтаксис около конструкции "(".

в моем случае ,речь идет про это место
Код: sql
1.
2.
3.
4.
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(
...
Рейтинг: 0 / 0
06.02.2019, 17:56
    #39770335
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
Kontox,

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
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)
...
Рейтинг: 0 / 0
06.02.2019, 18:16
    #39770355
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
Я тоже так подумал, после того как я убрал пробелы, после запуска запроса, стала появляться такая ошибка

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

но ведь эти столбцы есть
...
Рейтинг: 0 / 0
06.02.2019, 19:28
    #39770385
nullin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
Kontox, как минимум вот в чем дело, во втором случае, думаю тоже самое.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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
...
Рейтинг: 0 / 0
06.02.2019, 20:40
    #39770417
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
Kontoxно ведь эти столбцы естьЧего гадать, сделайте уже print, как сразу посоветовали.
...
Рейтинг: 0 / 0
07.02.2019, 15:01
    #39770707
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильный синтаксис около ключевого слова "SET".
Спасибо, разобрался, заработало:)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Неправильный синтаксис около ключевого слова "SET". / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]