Почему слияние успешно выполняется, но не дает результатов при проверке? - PullRequest
0 голосов
/ 23 апреля 2020

Я выполнил запрос на слияние, чтобы обновить некоторые итоги таблицы; он запустился успешно, но когда я go посмотрел на таблицу, данные, похоже, не были установлены. Что я сделал не так?

Мой запрос на слияние изначально содержал значения набора обновлений с s.total = t.total et c et c, но это дало мне ошибку:

The multi-part identifier "s.total_qty_received" could not be bound.

Запрос слияния:

MERGE INTO dbo.PO_HEADER_TEST t
   USING (select po_header_id, sum(qty_ordered) as total_qty_ordered,
sum(qty_received) as total_qty_received,
sum(qty_cancelled) as total_qty_cancelled,
sum(qty_open) as total_qty_open,
sum(amt_ordered) as total_amt_ordered,
sum(amt_received) as total_amt_received,
sum(amt_open) as total_amt_open
from dbo.PO_DETAIL_TEST
GROUP BY po_header_id) as s
   ON (t.po_header_id = s.po_header_id)
   WHEN MATCHED THEN UPDATE SET total_qty_received=t.total_qty_received, total_qty_cancelled=t.total_qty_cancelled, 
total_qty_open=t.total_qty_open, total_amt_ordered=t.total_amt_ordered, total_amt_received=t.total_amt_received, 
total_amt_open=t.total_amt_open;

Затем я запускаю запрос, чтобы проверить, что что-то произошло, но запрос не возвращает значений

select * from po_header_test where total_qty_ordered is not null

Подзапрос в моем Слияние выполняется правильно, и он говорит, что запрос успешно выполнен, но результатов не происходит?

Я обновил запрос, основываясь на комментариях снизу, но он по-прежнему не возвращает никаких изменений в таблицу заголовков PO.

MERGE INTO dbo.PO_HEADER_TEST t
   USING (select po_header_id, sum(COALESCE( qty_ordered, 0)) as total_qty_ordered,
sum(COALESCE( qty_received, 0)) as total_qty_received,
sum(COALESCE( qty_cancelled, 0)) as total_qty_cancelled,
sum(COALESCE( qty_open, 0)) as total_qty_open,
sum(COALESCE( amt_ordered, 0)) as total_amt_ordered,
sum(COALESCE( amt_received, 0)) as total_amt_received,
sum(COALESCE( amt_open, 0)) as total_amt_open
from dbo.PO_DETAIL_TEST
GROUP BY PO_HEADER_ID) as s
   ON (t.po_header_id = s.po_header_id)
   WHEN MATCHED THEN UPDATE SET  total_qty_received=s.total_qty_received, total_qty_cancelled=s.total_qty_cancelled, 
total_qty_open=s.total_qty_open, total_amt_ordered=s.total_amt_ordered, total_amt_received=s.total_amt_received, 
total_amt_open=s.total_amt_open;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...