2012-10-11 59 views
2

我有一個表OD_REFERENCE(OD_COL_1至5)SQL:遍歷行和更新行與最高值

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

是否有一個腳本,我可以使用,將獲得所有訂單號碼與空白的細節和(一次全部)糾正它們包含在該列中的最高值?

回答

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 = ' ' 
+0

我不知道是否可以使用相同的表列作爲d參考ML類型查詢。 –

+0

〜Bhrugesh你當然可以,這就是od_reference的別名是在第一行。我只是不會使用SQL預留字**或**作爲別名。 –

+0

@MarlinPierce當然。糾正。 –

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, '') = '' 
+0

感謝您的答案。我從未見過Coalesce功能。我有一個測試數據庫,即時通訊將嘗試這些... – Gerard

+0

COALESCE從值列表中返回第一個非NULL值。在這個例子中,ISNULL將以完全相同的方式工作。 –

+0

在此示例中,合併(OD_COL_5,'')=''等同於(OD_COL_5爲空或OD_COL_5 ='')。我假設OD_COL_5可以是NULL或空字符串。 –

0

我認爲這可能是你所追求的,應在SqlServer中 更新工作Ø設置o.od_col5 = n.highvalue從od_reference ø加入(選擇不同t1.od_col4,(從od_reference T2選擇最大值(t2.od_col5)其中t2.od_col4 = t1.od_col4)作爲高價值從od_reference T1凡t1.od_col5 = '')作爲N於o.od_col4 =正.odcol4其中o.od_col5 =「」