0

私は発注書を含むテーブルを持っています:

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 などの特定の po について、すべてのレコードにそれらの行の日付が含まれている場合、テーブル 2 の値を「確認済み」に更新したいと考えています。例 1 は、confirmed に入力します。PO 2 は、明細 2 に日付がないため、条件を満たしていません。

これを行うにはカーソルを使用する必要がありますか? SQL 2008 r2 を実行しています。

4

2 に答える 2

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
)
于 2013-09-24T01:37:17.157 に答える
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に示すように

于 2013-09-24T01:48:21.343 に答える