2013-04-04 90 views
2

我有一個表如下:如何根據SQL中以前的記錄更新行?

ID MARKET 
2 INDIV 
2 CPEINT 
2 INDIV 
2 INDIV 
2 INDIV 
2 INDIV 
2 INDIV 
5 INDIV 
5 INDIV 
5 CPEINT 
5 INDIV 
5 INDIV 
5 INDIV 
5 INDIV 
5 INDIV 
5 INDIV 

我要的是更新基礎上的ID和市場之前的行市場列的記錄。如果之前的市場是CPEINT並且當前ID與先前的ID相同,則將當前市場替換爲CPEINT。我要找的輸出將是:

ID MARKET 
2 INDIV 
2 CPEINT 
2 CPEINT 
2 CPEINT 
2 CPEINT 
2 CPEINT 
2 CPEINT 
5 INDIV 
5 INDIV 
5 CPEINT 
5 CPEINT 
5 CPEINT 
5 CPEINT 
5 CPEINT 
5 CPEINT 
5 CPEINT 

我可以使用類似MERGE或UPDATE做到這一點?

非常感謝!

+0

除非你有在該表中的其他列(如主鍵),則「上一行」的概念是模糊的(甲骨文)或非存在(SQL Server) – RichardTheKiwi 2013-04-04 09:52:13

+0

哪一個是你的數據庫? – TechDo 2013-04-04 09:59:23

+0

嗨techdo,第一個表是我的數據庫 – 2013-04-04 10:17:33

回答

3

請嘗試查詢的SQL服務器:

;with T as(
    select 
     ROW_NUMBER() over (order by ID) RNum, * 
    From 
     YourTable) 
    update c set MARKET='CPEINT' 
    from T c join 
    (select a.RNum, a.ID 
    From T a LEFT JOIN T b on a.RNum=b.RNum+1 
    where a.ID=b.ID and b.MARKET='CPEINT')x on c.RNum>=x.RNum AND c.ID=x.ID 
+0

是的,它完美的工作!謝謝! – 2013-04-04 10:38:48

0

這可能會也可能不會滿足您的要求。

update yourtable 
set market = 'CPEINT' 
where id in 
(select id 
from yourtable 
where market = 'CPEINT') 
and market = 'MARKET' 
+0

它不會。您的查詢不會留下任何INDIV的 – RichardTheKiwi 2013-04-04 10:08:04