一个表名tt
其中字段 pdno,ltno,cs11,cs12,cs13,cs14,cs15
我要选出cs11,cs12,cs13,cs14,cs15 中仅3点符合要求的(比如>20)
select * from tt
where (cs11>20 and cs12>20 and cs13>20 and cs14<=20 and cs14<=20)
or (cs11>20 and cs12>20 and cs13<=20 and cs14>20 and cs14<=20)
......
这样也太烦了,有没有高人告诉我一个简单的语句啊!
先谢谢了
如果结构已经确定成这样,而你的要求又确实如此,就没有办法了
如果可以修改结构,建议增加一个冗余字段,这个字段专门用来存放当前行的状态,然后在增加记录和修改记录时把这个状态一并更新,这样查询时就可以只查询这个字段了
如果不能修改结构,我觉得放到程序里来做更好一些,尤其当不是 >20 而是更复杂的判断条件时。存储过程也是可以考虑的方式,只是写起来比较麻烦
简单一点的语句
Code
WHERE (CASE WHEN CS1>20 THEN 1 ELSE 0 END)
+ (CASE WHEN CS2>20 THEN 1 ELSE 0 END)
+ (CASE WHEN CS3>20 THEN 1 ELSE 0 END)
+ (CASE WHEN CS4>20 THEN 1 ELSE 0 END)
+ (CASE WHEN CS5>20 THEN 1 ELSE 0 END)
+ (CASE WHEN CS6>20 THEN 1 ELSE 0 END)
+ (CASE WHEN CS7>20 THEN 1 ELSE 0 END)
+ (..) = 3
是呀!楼主,像这种Sql比较难处理的,你先把数据取出来,在程序中做过滤就简单多了。