Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于聚合记录集的SQL更新_Sql_Sql Server - Fatal编程技术网

基于聚合记录集的SQL更新

基于聚合记录集的SQL更新,sql,sql-server,Sql,Sql Server,我有一张有采购订单的桌子: 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/2

我有一张有采购订单的桌子:

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中的值更新为“已确认”。示例1将填充已确认的。PO 2将不符合标准,因为第2行没有日期


我是否需要使用光标来执行此操作?运行sql 2008 r2。

或者,如果要在确认之前确保
po行中的每个
po
都有条目,可以使用:

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
)
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)

中所示,您是否可以重新格式化示例数据集以正确渲染?这将有助于获得答案。编辑:谢谢汉克斯,这对汉克斯的建议帮助很大。今后我会记得检查类似的事情。由于采购订单记录是首先创建的,并且是采购订单行的父项,因此这些应始终具有值。不过,我喜欢将两者的总数进行比较。太好了。我想做一些平均值,但效果很好。唯一的问题是“通过聚合或其他集合操作消除空值”。但我认为在这种情况下这不应该是一个问题,只是一个警告。