中国教程网《Photoshop专家讲堂》光盘热售参与论坛活动,快速赚取金币精品素材,中英文字体
发新话题
打印

求教一条SQL语句

求教一条SQL语句


我有一个表如下:  
姓名  日期      薪水  
A   2002-01-01    1000   
A   2002-02-01    1500  
A   2001-03-01    800  
B   2002-01-01    1100  
B   2002-02-01    1000  
B   2001-05-01    1600  
B   2000-06-01    2000  
C   2002-01-01    100  
C   2002-02-01    1000  
C   2001-03-01    2000  
D   2002-01-01    1000  
D   2002-02-01    800  
想得到如下结果集,即:  
姓名  日期      薪水  
A   2002-01-01    1000   
A   2002-02-01    1500  
A   2001-03-01    800  
B   2002-02-01    1000  
B   2002-01-01    1100  
B   2001-05-01    1600  
C   2002-02-01    1000  
C   2002-01-01    100  
C   2001-03-01    2000  
D   2002-02-01    800  
D   2002-01-01    1000  
也就是说取出所有人最近三个月的薪水情况(注意:最近三个月指某员工最近领取过薪水的三个月,而不是从当前时间往回推三个月)  
请教一下能否只有一条语句就完成?  
---------------------------------------------------------------  

select  *  from  table  A  
where  A.id  in(select  top  3  id  from  table  Where  a.id=table1.id)  
---------------------------------------------------------------  

select  *  from  a  x  
where  日期  in  (select  top  3  日期  from  a  
                               where  姓名  =  x.姓名  
                               order  by  日期  desc)  
order  by  姓名,日期;  
                     

---------------------------------------------------------------  

同意楼上星级专家意见  
---------------------------------------------------------------  

该再开个帖子了:)  

select  t1.id,t1.姓名,t1.性别,t1.工作年限,t2.日期,t2.薪水,t2.房贴,t2.项目奖  
from  tab1  t1  join  (select  id,日期,薪水    =isnull(sum(case  when  类别='薪水'  then  数额  else  0  end),0)  ,  
                                                         房贴    =isnull(sum(case  when  类别='房贴'  then  数额  else  0  end),0)  ,  
                                                         项目奖=isnull(sum(case  when  类别='项目奖'  then  数额  else  0  end),0)  
                           from  tab2  group  by  id,日期)  t2  on  t1.id=t2.id  
order  by  t1.id  

如果还有别的项目,自己加CASE语句吧  
---------------------------------------------------------------  

以下语句与不加DISTINCT有何区别?呵呵  

回复人:  supsuccess(火气不小)  (  )  信誉:100    2002-10-23  19:16:00    得分:0   
   
   select  *  from  a  x  
where  日期  in  (select  distinct  top  3  日期  from  a  
                               where  姓名  =  x.姓名  
                               order  by  日期  desc)  
order  by  姓名,日期  

来看看我的答案,说白了还是用TOP3但是先用一个子查询将所有人员,日期重复的数据进行合并,然后在用以上各位大哥的办法查询  

SELECT  *   
FROM  (  
SELECT  A.日期,A.姓名,SUM(A.金额)  
FROM  TABLE1  A   
GROUP  BY  A.日期,A.姓名  )  TT   
WHERE  TT.日期  IN  (  SELECT  TOP  3  MM.日期  FROM    (SELECT  A.日期,A.姓名,SUM(A.金额)  
                                                                                 FROM  TABLE1  A   
                                                                               GROUP  BY  A.日期,A.姓名  )  MM   
                                                                                     WHERE  TT.姓名  =  MM.姓名   
                                                                               ORDER  BY  TT.日期  DESC  )

TOP


好,一问一答,很清楚!
快乐学习!
发新话题