首页 新闻 会员 周边

关于sql中条件筛选的一个问题(帮转)

0
[已关闭问题]

一个表名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)
......

这样也太烦了,有没有高人告诉我一个简单的语句啊!

先谢谢了

蝎的主页 | 小虾三级 | 园豆:770
提问于:2008-11-14 11:57
< >
分享
其他回答(2)
0

如果结构已经确定成这样,而你的要求又确实如此,就没有办法了

如果可以修改结构,建议增加一个冗余字段,这个字段专门用来存放当前行的状态,然后在增加记录和修改记录时把这个状态一并更新,这样查询时就可以只查询这个字段了

如果不能修改结构,我觉得放到程序里来做更好一些,尤其当不是 >20 而是更复杂的判断条件时。存储过程也是可以考虑的方式,只是写起来比较麻烦

丁学 | 园豆:18730 (专家六级) | 2008-11-14 12:27
0

简单一点的语句

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
玉开 | 园豆:8822 (大侠五级) | 2008-11-14 14:06
0

是呀!楼主,像这种Sql比较难处理的,你先把数据取出来,在程序中做过滤就简单多了。

金鱼 | 园豆:1090 (小虾三级) | 2008-11-14 16:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册