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

这个sql语句很难啊,求解啊
现在数据库中有一个字段含有多个名字,然后要做统计,实在想不出怎么写sql语句
比如table1中有两个个字段叫class和pass
class里面记录了课程,pass里面记录了所有通过该class的学生比如:
class         pass
 1           张三;李四;王麻子
 2           黎明;刘德华;张学友
 3           张三;张学友
 .           .....
 .           .....
现在要统计,通过课程最多的前5个,应该怎么写啊pass里面的人使用分号隔开的
------解决方案--------------------

create table table1(class int, pass varchar(100))

insert into table1
select  1           ,'张三;李四;王麻子' union all
select  2           ,'黎明;刘德华;张学友' union all
select  3           ,'张三;张学友'
go

select top 5 v as pass 
from
(
select class,
       SUBSTRING(t.pass, number ,CHARINDEX(';',t.pass+';',number)-number) v
from table1 t,master..spt_values s
where s.number >=1
and s.type = 'P'
and SUBSTRING(';'+t.pass,s.number,1) = ';'
)t
group by v
order by COUNT(*) desc
/*
pass
张学友
张三
王麻子
刘德华
李四
*/

------解决方案--------------------
到这里问吧,如果什么都差不多,那根本不需要有那么多的产品