powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Неправильный синтаксис около ключевого слова "SET".
10 сообщений из 10, страница 1 из 1
Неправильный синтаксис около ключевого слова "SET".
    #39770217
Kontox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
делаю запрос
Код: 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
Неправильный синтаксис около ключевого слова "SET".
    #39770221
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
print @sql
...
Рейтинг: 0 / 0
Неправильный синтаксис около ключевого слова "SET".
    #39770223
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Неправильный синтаксис около ключевого слова "SET".
    #39770299
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kontox,


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


и еще потом вот это сразу в глаза кидается
...
Рейтинг: 0 / 0
Неправильный синтаксис около ключевого слова "SET".
    #39770306
Kontox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Неправильный синтаксис около ключевого слова "SET".
    #39770335
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Неправильный синтаксис около ключевого слова "SET".
    #39770355
Kontox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тоже так подумал, после того как я убрал пробелы, после запуска запроса, стала появляться такая ошибка

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

но ведь эти столбцы есть
...
Рейтинг: 0 / 0
Неправильный синтаксис около ключевого слова "SET".
    #39770385
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Неправильный синтаксис около ключевого слова "SET".
    #39770417
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kontoxно ведь эти столбцы естьЧего гадать, сделайте уже print, как сразу посоветовали.
...
Рейтинг: 0 / 0
Неправильный синтаксис около ключевого слова "SET".
    #39770707
Kontox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, разобрался, заработало:)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Неправильный синтаксис около ключевого слова "SET".
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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