Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Kontox Member Откуда: Сообщений: 146 |
делаю запрос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] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
print @sql |
6 фев 19, 15:30 [21802788] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
;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] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
Kontox, )tPIVOT(MAX(ReturnPerc) FOR MonthDate IN (' + @MonthList + '))p' и еще потом вот это сразу в глаза кидается |
6 фев 19, 17:01 [21802903] Ответить | Цитировать Сообщить модератору |
Kontox Member Откуда: Сообщений: 146 |
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] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
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] Ответить | Цитировать Сообщить модератору |
Kontox Member Откуда: Сообщений: 146 |
Я тоже так подумал, после того как я убрал пробелы, после запуска запроса, стала появляться такая ошибка Сообщение 207, уровень 16, состояние 1, строка 122 Недопустимое имя столбца "return_count". Сообщение 207, уровень 16, состояние 1, строка 109 Недопустимое имя столбца "month_date". но ведь эти столбцы есть |
6 фев 19, 18:16 [21802977] Ответить | Цитировать Сообщить модератору |
nullin Member Откуда: pullin Сообщений: 174 |
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] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31785 |
|
||
6 фев 19, 20:40 [21803075] Ответить | Цитировать Сообщить модератору |
Kontox Member Откуда: Сообщений: 146 |
Спасибо, разобрался, заработало:) |
7 фев 19, 15:01 [21803573] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |