请balaschen老兄进来看看!是关于昨天一个SQL语句的!(200分)

  • 主题发起人 主题发起人 jrq
  • 开始时间 开始时间
J

jrq

Unregistered / Unconfirmed
GUEST, unregistred user!
》来自:balaschen, 时间:2002-4-1 17:31:00, ID:1016628
》用标准的写法试试:
》Select Name,Local,Age,
》 (Select Count(*) from List As A where A.Local=B.Local and A.Name<B.Name) As XH
》 from List As B order by XH,Local
》实在不行这么写:
》Select Name,Local,Age from
》(Select Name,Local,Age,
》(Select Count(*) from List As A where A.Local=B.Local and A.Name<B.Name) As XH
》 from List As B) As List order by XH,Local
》Sybase11.5,DB2都能支持

to balaschen:
多谢老兄昨天的帮助!
昨天是愚人节看来,我真是愚人一个! [:D] 我的SQL语句的水平也需要提高~
你写的这个我真的看不太明白!
今天也没有来的及翻书,请再给解释一下好吗!
Select Count(*) ....... 这个Count(*) 用在这个我不太明白的!

请留言,顺便拿分!
 
我也提高了!
 
to 荷兄: [:D][:D] 我也学了很多!
 
你用这方法在Oracle解决了问题没有?
 
在 oracle上 出现了一点问题! SQL_PLUS提示了信息
我今天给程序加东东忙了一天,早饭时匆匆看了一眼!
没有仔细的分析呢!
 
不好意思班門弄斧:
Select Name,Local,Age,
(Select Count(*) from List As A where A.Local=B.Local and A.Name<B.Name) As XH
from List As B order by XH,Local
我的理解是這樣的:整個語句按照xh排序,當xh相等時,
以local字段排序。
關于xh值以一條記錄,一條記錄說明,
當查詢的一條記錄時,尋找與它local相等的記錄,并且
比較比它name小的記錄,沒找到count(*)為0,即xh為零,
找到一條則為1,以此類推。
所以有几組local,就有几組xh值,就可以通過xh,local排序達到你的
要的效果。
 
谢谢回答!
我学习!
结贴!
 
你用这方法在Oracle解决了问题没有?
对于你这个问题我的思路是这样的:
因为你要按地区(Local)排序枚举,所以其要求的序列就是把所有的记录按姓名、地区分成
姓名1 地区1 第一层
姓名2 地区2 第一层
。。。

姓名m 地区1 第n层
姓名n 地区2 第n层
。。。

很明显,所有层数相同的记录排列在一起,这样只要计算出每个记录的层数问题就解决了
所以问题就演变为求每个记录的层数,按照你的需求,层数的算法规则应当为:
地区相同,排(按姓名排序)在其前面的记录数有几个,
(Select Count(*) from List A where A.Local=B.Local and A.Name<B.Name
 
后退
顶部