У меня есть запрос
WITH cte AS
(
SELECT
*,
DATEPART(WEEKDAY, Dt) AS WeekDay,
PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY SaleCount)
OVER (PARTITION BY ItemRelation, DocumentNum, DocumentYear) as PERCENTILE,
AVG(SaleCount) OVER (PARTITION BY ItemRelation, DocumentNum, DocumentYear, DATEPART(WEEKDAY, Dt), IsPromo) AS AVG_WeekDay
FROM
[Action].[dbo].[promo_data_copy]
)
UPDATE a
SET SaleCount = cte.AVG_WeekDay
FROM CTE
JOIN [Action].[dbo].[promo_data_copy] a ON a.Dt = cte.dt
AND a.ItemRelation = cte.ItemRelation
AND a.DocumentNum = cte.DocumentNum
AND a.DocumentYear = cte.DocumentYear
AND a.ispromo = cte.ispromo
WHERE CTE.PERCENTILE < CTE.SaleCount
AND DATEPART(WEEKDAY, CTE.Dt) < 5
AND CTE.ispromo = 0 ;
Когда я запускаю его, моя таблица promo_data_copy обновляется. Это не правильно.
Подскажите, пожалуйста, как это сделать, чтобы окончательный результат возвращался во временную таблицу, пусть "temp_table"?
Edit:
WITH cte AS
(
SELECT
*,
DATEPART(WEEKDAY, Dt) AS WeekDay,
PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY SaleCount)
OVER (PARTITION BY ItemRelation, DocumentNum, DocumentYear) as PERCENTILE,
AVG(SaleCount) OVER (PARTITION BY ItemRelation, DocumentNum, DocumentYear, DATEPART(WEEKDAY, Dt), IsPromo) AS AVG_WeekDay
FROM
[Action].[dbo].[promo_data_copy]
)
SELECT *
INTO #temp_table
FROM cte
SET SaleCount = cte.AVG_WeekDay
FROM CTE
JOIN #temp_table a ON a.Dt = cte.dt
AND a.ItemRelation = cte.ItemRelation
AND a.DocumentNum = cte.DocumentNum
AND a.DocumentYear = cte.DocumentYear
AND a.ispromo = cte.ispromo
WHERE CTE.PERCENTILE < CTE.SaleCount
AND DATEPART(WEEKDAY, CTE.Dt) < 5
AND CTE.ispromo = 0 ;
Ошибка
Сообщение 102, уровень 15, состояние 1, строка 12
Неверный синтаксис рядом с конструкцией "=".
Редактировать # 2:
WITH cte AS
(
SELECT
*,
DATEPART(WEEKDAY, Dt) AS WeekDay,
PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY SaleCount)
OVER (PARTITION BY ItemRelation, DocumentNum, DocumentYear) as PERCENTILE,
AVG(SaleCount) OVER (PARTITION BY ItemRelation, DocumentNum, DocumentYear, DATEPART(WEEKDAY, Dt), IsPromo) AS AVG_WeekDay
FROM
[Action].[dbo].[promo_data_copy]
)
SELECT *
INTO #temp_table
FROM cte
UPDATE a
SET SaleCount = cte.AVG_WeekDay
FROM #temp_table
JOIN #temp_table a ON a.Dt = cte.dt
AND a.ItemRelation = cte.ItemRelation
AND a.DocumentNum = cte.DocumentNum
AND a.DocumentYear = cte.DocumentYear
AND a.ispromo = cte.ispromo
WHERE CTE.PERCENTILE < CTE.SaleCount
AND DATEPART(WEEKDAY, CTE.Dt) < 5
AND CTE.ispromo = 0 ;
Тогда я получаю много ошибок одного типа
Сообщение 4104, уровень 16, состояние 1, строка 11
Не удалось связать составной идентификатор "cte.dt"
Сообщение 4104, уровень 16, состояние 1, строка 11
Не удалось связать составной идентификатор "cte.ItemRelation"
Сообщение 4104, уровень 16, состояние 1, строка 11
Не удалось связать составной идентификатор "cte.DocumentNum"
Как я могу исправить запрос?