2013-02-19 105 views
1

我想更新一個表中的一列如下:SQL服務器 - 更新查詢

TB_Quest:

cod_1 cod_2 cod_3 Description Value  Date 
----------------------------------------------------------------- 
123  181  6401 product A 7526836 19/02/2013 
123  181  6401 product B 4638607 18/02/2013 
123  181  6401 product C 9633450 06/02/2013 
789  314  1361 product 1 6218035 15/02/2013 
789  314  1361 product 2 6189032 14/02/2013 

結果應該是:

cod_1 cod_2 cod_3 Description Value  Date 
----------------------------------------------------------------- 
123  181  6401 product A  7526836 19/02/2013 
123  181  6401 product A  4638607 18/02/2013 
123  181  6401 product A  9633450 06/02/2013 
789  314  1361 product 1  6218035 15/02/2013 
789  314  1361 product 1  6189032 14/02/2013 

有誰知道嗎?

在此先感謝。

+1

你嘗試過什麼到目前爲止,什麼具體的問題你有嗎?更新數據是一項基本操作,所以不清楚你的難處是什麼。 – Pondlife 2013-02-19 15:20:33

+0

描述的基礎是什麼?最近的日期? – 2013-02-19 15:22:34

+1

那麼你是說你需要一組代碼的最新[描述]來應用於同一組代碼的所有先前版本? – RBarryYoung 2013-02-19 15:23:40

回答

2

你不清楚你如何選擇值。以下是一種方法:

with toupdate (
    select t.*, min(description) over (partition by cod_1) as minDescription 
    from t 
    ) 
update toupdate 
    set Description = minDescription 

它將描述設置爲由cod_1定義的每個組的最小值。這適合你的問題中的數據。

如果你想要最新的描述,我會做一個子查詢:

[問題上傳代碼]

update t 
    set description = 
     (select top 1 description 
     XXX 
     where t2.cod_1 = t.cod_1 
     order by date desc) 

(現在,添加一個「由叔T2」的selectwhere之間在子查詢,其中XXX爲。)

+0

這將工作在SQL Server 2008及以下? – 2013-02-19 15:23:16

+2

它將在SQL Server 2005和2008上工作。窗口函數在2005年以前不可用。 – 2013-02-19 15:25:25

+0

謝謝我只是澄清一下,因爲這個語句「SUM(Val)OVER(ORDER BY Val)」只會在2012年工作。':'' – 2013-02-19 15:27:23

1
select cod_1, cod_2, cod_3, max(Date) as date 
    From TB_Quest 
    group by cod_1, cod_2, cod_3 

加入它與cod_1,cod_2,cod_3,日期爲TB_Quest得到說明和更新的表J中OIN再次選擇用表,但只使用cod_1,cod_2,cod_3

0

試試這個

update TB_Quest set Description = 
     if (Description= 'product 2' , 'product 1' , 
     if(Description= 'product 1' , 'product 1', 
     if (Description = 'product A' , 'product A' , 'product A'))) 

DEMO SQLFIDDLE HERE

+1

'Product B' - >'Product A'?我認爲他正在尋找能夠同時更新一切的東西。 – Conduit 2013-02-19 15:33:57

+0

@jmarcel現在編輯我的答案 – 2013-02-19 15:49:52

+0

這種方式是不可行的,因爲已經有太多的描述,他們會改變一週/月,並且會創建許多其他全新的。這些'產品1'等只是一個小例子。 – jMarcel 2013-02-19 16:37:24