SQL:循环遍历行并更新具有最高值的行

时间:2012-10-11 16:56:35

标签: sql sql-server sql-server-2005

我有一个表OD_REFERENCE(OD_COL_1到5)

REFERENCE有5列,其中OD_COL_4等于订单号(例如,编号'12345'),OD_COL_5具有订单的详细信息:

ROW  OD_COL_4  OD_COL_5 

1     12345       11

2     12345       11

3     12345         <---no number 

4     12345       99

5     12346       99

6     12347       99

某些订单号具有空白(无值),需要手动更新为该订单列的最高编号。

查找包含空白详细信息的订单号

SELECT DISTINCT OD_COL_4 FROM OD_REFERENCE

WHERE OD_COL_5 = ' '

然后我将订单号从列复制到记事本并运行查询:

SELECT DISTINCT OD_COL_5 FROM OD_REFERENCE

WHERE OD_COL_4 = '--and i paste the order number in here' 

然后我手动浏览每个订单并将所有列中的值更新为该列中的最高值。因此,对于订单12345,我将所有字段设置为99。

是否有一个我可以使用的脚本,它将获取包含空白详细信息的所有订单号并使用该列中包含的最高值更正(一次性全部)?

3 个答案:

答案 0 :(得分:1)

这应该在SQL Server中起作用:

update a
    set OD_COL_5 = b.MaxOD_COL_5
from orders a
inner join(
            select OD_COL_4, max(OD_COL_5) as MaxOD_COL_5
            from orders
            where coalesce(OD_COL_5, '') <> ''
            group by OD_COL_4
          ) b
on a.OD_COL_4 = b.OD_COL_4  
where coalesce(OD_COL_5, '') = ''

答案 1 :(得分:0)

update od_reference oref
set od_col_5 = (
    select max(od_col_5)
    from od_reference
    where od_col_4 = oref.od_col_4
    ) s
where od_col_5 = ' '

答案 2 :(得分:0)

我认为这可能就是你所追求的,这应该适用于SqlServer 更新o设置o.od_col5 = n.highvalue来自od_reference o Join(选择不同的t1.od_col4,(从od_reference t2中选择max(t2.od_col5),其中t2.od_col4 = t1.od_col4)为highvalue来自od_reference t1其中t1.od_col5 ='')n On o.od_col4 = n.odcol4其中o.od_col5 =''