有个表 ZB_SAL_TB 字段为 ID,SAL_1,SAL_2......SAL_12  12个月工资。
现想找出 两个月以上的工资大于500的数据。
比如 11月,12月工资是 600, 其他月份都是 300, 那这个数据就得出来。

解决方案 »

  1.   


    用case when 判断就好了select * from ZB_SAL_TB 
    where (case when (SAL_1>500) then 1 else 0 end)+
          (case when (SAL_2>500) then 1 else 0 end)+
          (case when (SAL_3>500) then 1 else 0 end)+
          (case when (SAL_4>500) then 1 else 0 end)+
          (case when (SAL_5>500) then 1 else 0 end)+
          (case when (SAL_6>500) then 1 else 0 end)+
          (case when (SAL_7>500) then 1 else 0 end)+
          (case when (SAL_8>500) then 1 else 0 end)+
          (case when (SAL_9>500) then 1 else 0 end)+
          (case when (SAL_10>500) then 1 else 0 end)+
          (case when (SAL_11>500) then 1 else 0 end)+
          (case when (SAL_12>500) then 1 else 0 end) >=2
      

  2.   

    取多列的最大值用greatest函数,如果不行你就得做行列转化后再查了
      

  3.   

    SELECT *  FROM ZB_SAL_TB  WHERE decode(sign( SAL_1-500),1,1)+ decode(sign( SAL_2-500),1,1)+decode(sign( SAL_3-500),1,1)+ decode(sign( SAL_4-500),1,1)+ decode(sign( SAL_5-500),1,1)+decode(sign( SAL_6-500),1,1)+ .....>2
      

  4.   

    如果考虑到sql语句的效率呢,这个表是否就有问题了?
    可以把表设计成类似于  id,月份(yyyymm),工资.  三个字段,会清晰些.id,月份为主键
      

  5.   

    用交叉表``然后INSERT 到一个临时表``再SELECT出来````!
    这个的效率会不会比较高呢`~?
      

  6.   

    CASE WHEN 在遇到大数据量时``这么多列``会不会卡死啊`?