日期:2014-05-19  浏览次数:20748 次

where 带条件的判断
id     mark     age    
1       0           90
1       0           80
1       1           6
1       1           2
1       2           28
1       2           50

我想实现的是
当mark=0的时候,删除age> 3的计录
当mark=1的时候,删除age> 30的计录
当mark=2的时候,删除age> 80的计录
执行完SQL语句后
数据库应该是
id     mark     age
1       0           80
1       1           2
1       2           28

我自己写的是
delete   table   where  
case
        WHEN   mark   = '0 '   THEN   age> '3 '
        WHEN   mark   = '2 '   THEN   age> '30 '
        else   THEN   age> '90 '
end
可以不行,谁能帮   我学一个带条件判断的类似的语句啊



------解决方案--------------------
delete 表名
where (mark = '0 ' and age> '3 ') or (mark = '2 ' and age> '30 ') or (age> '90 ')


--如果是数值型
delete 表名
where (mark =0 and age> 3) or (mark =2 and age> 30) or (age> 90)



------解决方案--------------------
delete from table
where age> case when mark=0 then 80 when mark=1 then 3 when mark=2 then 30 else age end
mark age case...end 后的值 是否删除

0 79 80 否
0 80 80 否
0 81 80 是
1 2 3 否
1 3 3 否
1 4 3 是
2 29 30 否
2 30 30 否
2 31 30 是
------解决方案--------------------
declare @mark int
select @mark=case when 0 then 'age> 3 '
case when 2 then 'age> 30 '
else 'age> 90 '
end
exec( 'delete table where '+@mark)