更新满足以下条件的记录:
如果有LIKE "2%"则更新所有LIKE "2%"的,
否则更新>2的最小的记录
以上两个条件满足后,还需同时满足StepSts=0
条件字段StepNum的几个取值如下:
第一种情况
StepNum StepSts
1 10
2 10
21 10
22 10
23 10
3 0
4 0
5 0
结果应当是StepNum=3
第二种情况
StepNum StepSts
1 10
2 10
21 0
22 0
23 0
3 0
4 0
5 0
结果应当是StepNum=21,22,23
请问如何用一条SQL语句完成
如果有LIKE "2%"则更新所有LIKE "2%"的,
否则更新>2的最小的记录
以上两个条件满足后,还需同时满足StepSts=0
条件字段StepNum的几个取值如下:
第一种情况
StepNum StepSts
1 10
2 10
21 10
22 10
23 10
3 0
4 0
5 0
结果应当是StepNum=3
第二种情况
StepNum StepSts
1 10
2 10
21 0
22 0
23 0
3 0
4 0
5 0
结果应当是StepNum=21,22,23
请问如何用一条SQL语句完成
解决方案 »
- 求优化,目前要5分钟才出结果,程序超时了,其中很多表都几十万数据。
- SQLserver 相关的服务都没了。。
- 100分请教一个读数据问题——
- 请教下子查询的用法-- 想统计每个系的教师人数
- datetime类型的存储方式问题,想了很久了...
- 关于分组查询,书上如是说:~~~~~~~~~~~~~~
- 实在搞不明白,为什么错了??关于外键的cascade操作
- 各位高手,我在表里建了一个名为id的字段,bigint型的,我想把它做为标记记录的唯一识别号,但是id字段最高也就8位,如何设置id没有限制
- 数据类型的问题,快来拿分。。。。急
- sqlserver2000实现这样的功能用哪种方式最简便?
- 这句sql怎么写?如何将数据库保存为data文件及log文件
- 求救,利用查询语句,显示所有预期收入低于5000.00的旅游线及其预期收入的总和
StepNum = xx
WHERE StepNum IN(
-- 条件1
SELECT StepNum FROM tb
WHERE StepSts=0
AND StepNum LIKE '2%'
UNION ALL
-- 条件2
SELECT StepNum = MIN(StepNum) FROM tb
WHERE StepSts=0
AND StepNum > 2
AND NOT EXISTS(
SELECT StepNum FROM tb
WHERE StepSts=0
AND StepNum LIKE '2%')
)
set StepNum = value
where StepNum IN
(
--条件一
select StepNum from tb where StepNum like '2%' and StepSts = 0
union all
--条件二
select min(StepNum) from
(select StepNum from tb where StepNum not in (select StepNum from tb where StepNum like '2%' and StepSts = 0) t where StepSts = 0 and StepNum > 2)
1 10
2 10
21 10
22 10
23 10
3 0
4 0
5 0
结果应当是StepNum=3
第二种情况
StepNum StepSts
1 10
2 10
21 0
22 0
23 0
3 0
4 0
5 0
结果应当是StepNum=21,22,23
update A
set StepNum=Value
from tableName A
inner join
(
select * from tableName where ...相应的条件) B
on A.StepNum=B.StepNum
where A.StepNum like '2%'