簡體   English   中英

基於匯總記錄集的SQL更新

[英]SQL Update based on aggregate record set

我有一張帶有采購訂單的表:

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,例如po_num 1,如果所有記錄中都有針對這些行的日期,我想將表2中的值更新為“ confirmed”。 示例1將被確認。 由於第2行沒有日期,因此PO 2將不符合條件。

我需要使用游標執行此操作嗎? 運行sql 2008 r2。

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
)

或者,如果要在確認之前確保po_line表中每個po條目,則可以使用:

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中所示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM