如何根据SQL中的先前记录更新行?

时间:2013-04-04 09:47:56

标签: 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和MARKET中的前一行更新MARKET列中的记录。如果之前的市场是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之类的东西来做这件事吗?

非常感谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这可能会也可能不会满足您的要求。

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