oracle更新数据两条以上相同则只更新一条
Table:IDNADTST1YY201301YY201501YY201602QQ201402QQ201503SS20150我希望一条update语句执行后结果是这样的:...
Table:
ID
NA
DT
ST
1 YY 2013 0
1
YY
2015
0
1 YY 2016 0
2 QQ 2014 0
2
QQ
2015
0
3 SS 2015 0
我希望一条update语句执行后结果是这样的:
Table:
ID NA DT ST
1 YY 2013 1
1 YY 2015 0
1 YY 2016 0
2 QQ 2014 1
2 QQ 2015 0
3 SS 2015 1
再执行update结果是这样:
Table:
ID NA DT ST
1 YY 2013 1
1 YY 2015 1
1 YY 2016 0
2 QQ 2014 1
2 QQ 2015 1
3 SS 2015 1
再执行update结果是这样:
Table:
ID NA DT ST
1 YY 2013 1
1 YY 2015 1
1 YY 2016 1
2 QQ 2014 1
2 QQ 2015 1
3 SS 2015 1
很显然,我是要更新的是,如果ID与NA相同但DT不一样,一次更新最前面的一条。。。 展开
ID
NA
DT
ST
1 YY 2013 0
1
YY
2015
0
1 YY 2016 0
2 QQ 2014 0
2
2015
0
3 SS 2015 0
我希望一条update语句执行后结果是这样的:
Table:
ID NA DT ST
1 YY 2013 1
1 YY 2015 0
1 YY 2016 0
2 QQ 2014 1
2 QQ 2015 0
3 SS 2015 1
再执行update结果是这样:
Table:
ID NA DT ST
1 YY 2013 1
1 YY 2015 1
1 YY 2016 0
2 QQ 2014 1
2 QQ 2015 1
3 SS 2015 1
再执行update结果是这样:
Table:
ID NA DT ST
1 YY 2013 1
1 YY 2015 1
1 YY 2016 1
2 QQ 2014 1
2 QQ 2015 1
3 SS 2015 1
很显然,我是要更新的是,如果ID与NA相同但DT不一样,一次更新最前面的一条。。。 展开
2个回答
推荐于2017-09-02
展开全部
oracle更新数据两条以上相同则只更新一条
update 表名 t
set t.st = '1'
where rowidtochar(rowid) in
(select t2.r1
from (select rowidtochar(rowid) r1,
row_number() over(partition by t.id, t.na order by 1) r2
from 表名 t
where t.st = '0') t2
where t2.r2 = 1);
update 表名 t
set t.st = '1'
where rowidtochar(rowid) in
(select t2.r1
from (select rowidtochar(rowid) r1,
row_number() over(partition by t.id, t.na order by 1) r2
from 表名 t
where t.st = '0') t2
where t2.r2 = 1);
展开全部
update 表名 t
set t.st = '1'
where rowidtochar(rowid) in
(select t2.r1
from (select rowidtochar(rowid) r1,
row_number() over(partition by t.id, t.na order by 1) r2
from 表名 t
where t.st = '0') t2
where t2.r2 = 1);
set t.st = '1'
where rowidtochar(rowid) in
(select t2.r1
from (select rowidtochar(rowid) r1,
row_number() over(partition by t.id, t.na order by 1) r2
from 表名 t
where t.st = '0') t2
where t2.r2 = 1);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询