日期:2014-05-17  浏览次数:20451 次

数据过滤的SQl语句
表A、表B完全相同,表A中存学生成绩,如:
表A
ID     学生姓名    课程名称    分数
ID     Sname       Cname       Score
1       张三        语文         88
2       张三        数学         97
3       张三        数学         98
4       李四        语文         84
5       李四        语文         88
现在要将表A中数据插入表B,要过滤掉一些重复的数据,如张三的数学成绩和李四的语文成功有一条重复数据,只保留分数最高的那一条。过滤后表B的数据为:
表B
ID     学生姓名    课程名称    分数
ID     Sname       Cname       Score
1       张三        语文         88
2       张三        数学         98
3       李四        语文         88
------解决方案--------------------
insert into b(id,sname,cname,score)
select id=row_number() over(order by getdate()),
  sname,cname,max(score) as score
from tb
group by sname,cname

------解决方案--------------------
select Sname,Cname,max(Score) from 表A group by Sname,Cname
------解决方案--------------------
with tb(id  ,Sname,Cname  , Score , CreateTime ,Other )
as 
(select 1, '张三','语文',88,'2010-01-01','' union all
select  2, '张三','数学',97,'2010-01-01','' union all
 select 3,'张三', '数学',98,'2010-01-01','' union all
 select 4,'李四', '语文',84,'2010-01-01','' union all
select 5, '李四', '语文', 88,'2010-01-01',''
)
select * from tb tb1 where id in(select id from tb tb2 where tb1.Sname=tb2.Sname and tb1.Cname=tb2.Cname and tb2.Score=
(select max(Score) from tb tb3 where tb3.Sname=tb2.Sname and tb2.Cname=tb3.Cname))

------解决方案--------------------
insert into b(Sname,Cname,Score)
select Sname,Cname,max(Score) score
from 表A 
group by Sname,Cname