求高人指点一条sql语句

0xTang 发布于 2012/08/09 22:40
阅读 261
收藏 1
SQL

salary表结构和数据如下:

求一条sql求出有3个月工资大于10000的员工名字。

如上求出结果为B。

别人问我的,我实在是想吐槽这个表设计,无奈自己功力不够,特来求救。。望高人指点。再次先谢过。

加载中
0
hulubo
hulubo
select * from (
select t.*,
case when jan>10000 then 1 else 0 end jan1,
case when feb>10000 then 1 else 0 end feb1,
case when mar>10000 then 1 else 0 end mar1,
case when apr>10000 then 1 else 0 end apr1,
case when may>10000 then 1 else 0 end may1,
case when jun>10000 then 1 else 0 end jun1
from tab1 t
) where jan1+feb1+mar1+apr1+may1+jun1>=3


0xTang
0xTang
你这个任然是最近答案,哈,谢谢啦。
0
黄龍
黄龍

代码我就不写了!给个思路你吧:

1写个方法,参数为所有的月份,返回值是这些月份中薪水排第三的值

2.select * from salary a where funciont_xxx(a.jan,a.feb,a.mar,a.apr,a.may,a.jun) > 10000

0
0xTang
0xTang

引用来自“hulubo”的答案

select * from (
select t.*,
case when jan>10000 then 1 else 0 end jan1,
case when feb>10000 then 1 else 0 end feb1,
case when mar>10000 then 1 else 0 end mar1,
case when apr>10000 then 1 else 0 end apr1,
case when may>10000 then 1 else 0 end may1,
case when jun>10000 then 1 else 0 end jun1
from tab1 t
) where jan1+feb1+mar1+apr1+may1+jun1>=3


有错,不过我在where前面要加个alias才通过。就是
select * from (
select t.*,
case when jan>10000 then 1 else 0 end jan1,
case when feb>10000 then 1 else 0 end feb1,
case when mar>10000 then 1 else 0 end mar1,
case when apr>10000 then 1 else 0 end apr1,
case when may>10000 then 1 else 0 end may1,
case when jun>10000 then 1 else 0 end jun1
from salary t
) as t2 where jan1+feb1+mar1+apr1+may1+jun1>=3


0
孙豪8
孙豪8
一条SQL恐怕实现不了吧,建议用存储过程。
0xTang
0xTang
一楼已经解决了,谢啦..
0
黄龍
黄龍

oracle:

select * from salary a where (
floor(length(a.m1)/5) + 
floor(length(a.m2)/5) + 
floor(length(a.m3)/5) + 
floor(length(a.m4)/5) + 
floor(length(a.m5)/5) + 
floor(length(a.m6)/5)
) >= 3

0xTang
0xTang
没oracle, 一楼已经解决了,谢啦..
返回顶部
顶部