Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:数据库    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  SQL排名与交叉  
 
SQL排名与交叉

--只用一句SQL计算名次,允许并列
--方法改变世界
--create table sc(name varchar(50),subj varchar(50),mark float,ord int)
--参数:
--sc 表名
--name 人名
--mark 分数
--ord 名次
--1、当名次合并后,下一名次按人数加(在她前面有多少人,名次是不连续的)
update sc set ord=(select count(*)+1 from sc B where B.mark>sc.mark)
--2、当名次合并后,下一名次加1(名次总是连续的)
update sc set ord=(select count(*) from (select distinct mark from sc) as distmark where distmark.mark >=sc.mark)

--不用循环,简单搞定SQL交叉表
--参数同上
create proc usp_cross
as
declare @s varchar(8000)
select @s='select name'
select @s=@s+',sum(case subj when '''+subj+''' then mark end) as ['+subj+']'
from (select distinct subj from sc) as distSj
select @s=@s+' from sc group by name'
print @s
exec(@s)

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站