Ссылаясь на CTE в ГДЕ состоянии ОБНОВЛЕНИЯ - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь выполнить запрос, подобный этому:

WITH cte AS
(
  SELECT id, category, SUM(amount) AS sum_amount FROM t1 GROUP BY id, category
)
UPDATE table SET amount = cte.sum_amount WHERE id = cte.id;

Тем не менее, я получаю сообщение об ошибке

Unknown column 'cte.id in WHERE clause'

Кто-нибудь знает, как я могу обратиться к моей общей таблицеВыражение в запросе UPDATE или иным образом переписать его?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Альтернативным способом с Временной таблицей вы можете прочитать о CTE и Временной таблице

Временная таблица:

SELECT id, category, SUM(amount) AS sum_amount 
INTO #temp
FROM t1 GROUP BY id, category

Обновить запрос с помощью временной таблицы:

UPDATE OT
SET  OT.sum_amount= TT.sum_amount
FROM table OT
JOIN #temp TT
    ON OT.id = TT.id

CTE:

WITH cte AS
(
  SELECT id, category, SUM(amount) AS sum_amount FROM t1 GROUP BY id,category
)
UPDATE T
SET T.sum_amount= CT.sum_amount
FROM table T
JOIN cte CT
    ON T.id = CT.id
0 голосов
/ 03 декабря 2018

Вы можете попробовать ниже

WITH cte AS
(
  SELECT id, SUM(amount) AS sum_amount FROM t1 GROUP BY category
)
UPDATE T
SET  T.sum_amount= CT.sum_amount
FROM table T
JOIN cte CT
     ON T.id = CT.id
...