2013-09-24 5 views
0

У меня есть таблица с заказами на поставку:SQL Update на основе совокупной записи набор

po_line table 
+--------+---------+-----------+ 
| po_num | po_line | date  | 
+--------+---------+-----------+ 
| 1  | 1  | 9/22/2013 | 
| 1  | 2  | 9/22/2013 | 
| 1  | 3  | 9/22/2013 | 
| 2  | 1  | 9/21/2013 | 
| 2  | 2  | NULL  | 
+--------+---------+-----------+ 

po table 
+--------+-----------+ 
| po_num | confirmed | 
+--------+-----------+ 
| 1  | NULL  | 
| 2  | NULL  | 
+--------+-----------+ 

Для данного ПО, пример po_num 1, я хотел обновить значение в таблице 2, чтобы «подтвердил», если все у записей есть дата в них для этих строк. Пример 1 будет заполнен подтвержденным. PO 2 не будет соответствовать критериям, поскольку строка 2 не имеет даты.

Нужно ли использовать курсор для этого? Запуск sql 2008 r2.

+0

Не могли бы вы быть так чтобы переформатировать ваш примерный набор данных для правильной рендеринга - это поможет совсем немного получить ответ. Редактировать: Спасибо –

ответ

0
UPDATE po SET confirmed = 'confirmed' 
FROM po T 
WHERE 
NOT T.po_num IN 
(
SELECT po_num FROM po_line 
WHERE po_date IS NULL 
) 
+0

ДЛЯ использования массового обновления CLAUSE realnumber3012

+0

Спасибо, это помогло много –

0

В качестве альтернативы, если вы хотите, чтобы убедиться, что входы для каждого po в po_line таблице до подтверждения, вы можете использовать:

update po set confirmed = 'confirmed' 
    where po.po_num in (select po_num from 
    (select po_num, count(po_date) dated, count(*) total from po_line group by po_num) q 
     where dated=total) 

, как показано на http://sqlfiddle.com/#!6/b16988/8/0

+0

Спасибо за это предложение. Я не забуду проверить, как это происходит в будущем. Они всегда должны иметь значения, поскольку запись po создается сначала и является родителем po_lines. Мне нравится, что сравнение итогов этих двух. Замечательно. Я смотрел на некоторые средние значения, но это хорошо работает. Только это означает, что «Null value исключается агрегированием или другой операцией SET». но я не думаю, что это должно быть проблемой в этом случае, было всего лишь предупреждением. –

Смежные вопросы