日期:2014-05-18  浏览次数:20666 次

求解释
create table 表头(fid int)
insert into 表头 values(1)
create table 表体(fid int,物料 varchar(10),采购员 varchar(10))
insert into 表体 values(1 ,'a', 'a')
insert into 表体 values(1 ,'b', 'b')
insert into 表体 values(1 ,'c', 'a')
go

select fid = (select count(distinct 采购员) from 表体 where fid = t.fid and 采购员 < t.采购员) + 1 , 物料,采购员 from 表体 t order by fid

drop table 表头 , 表体

这是wugui大侠给写的一段sql,哪位给详细解释下,包括sql执行的原理等等,理解不上去,谢谢啦

------解决方案--------------------
我记得你是求个序号?

你把这个看懂了,就明白了.这个列只对分数排序
SQL code
表jh03有下列数据:
name score
aa  99
bb  56
cc  56
dd  77
ee  78
ff  76
gg  78
ff  50

1. 名次生成方式1,Score重复时合并名次
SELECT * , Place=(SELECT COUNT(DISTINCT Score) FROM jh03 WHERE Score >= a.Score)
FROM jh03 a
ORDER BY Place
结果
Name       Score        Place 
---------------- ----------------- ----------- 
aa         99.00        1
ee         78.00        2
gg         78.00        2
dd         77.00        3
ff         76.00        4
bb         56.00        5
cc         56.00        5
ff         50.00        6

2. 名次生成方式2 , Score重复时保留名次空缺
SELECT * , Place=(SELECT COUNT(Score) FROM jh03 WHERE Score > a.Score) + 1
FROM jh03 a
ORDER BY Place
结果
Name       Score        Place 
--------------- ----------------- ----------- 
aa         99.00        1
ee         78.00        2
gg         78.00        2
dd         77.00        4
ff         76.00        5
bb         56.00        6
cc         56.00        6
ff         50.00        8