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

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

jrq

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1016377
----------------------------
》来自:onedot, 时间:2002-4-1 17:35:00, ID:1016637
》我没有用过ORACLE,平时我写SQL只参照SQL 92标准
》每个地方加AS.这个是SQL 92标准的写法。我想ORACLE不会不支持吧
》Select Name,Local,Age,
》 XH=(Select Count(*) from List AS A where A.Local=B.Local and A.ID<B.ID)
》 from List AS B order by XH,Local
》//其实括号里的LIST 不用AS
》Select Name,Local,Age,
》 XH=(Select Count(*) from List where Local=B.Local and ID<B.ID)
》 from List AS B order by XH,Local
//还有,XH还是用自增字段才不会错,用NAME求COUNT有问题
---------------------------------
to onedot:
多谢老兄昨天的帮助!
昨天是愚人节看来,我真是愚人一个! [:D] 我的SQL语句的水平也需要提高~
你写的这个我真的看不太明白!
今天也没有来的及翻书,请再给解释一下好吗!
Select Count(*) ....... 这个Count(*) 用在这个我不太明白的!

请留言,顺便拿分!
 
count(*)返回行数
 
楼上:
我知道count(*)返回行数!
您说这个 XH=(Select Count(*) from List AS A where A.Local=B.Local and A.ID<B.ID)
当中返回的代表什么意思?
 
代表这个查询返回的总行数count(*)相当于一个字段。
 
XH其实就是相当于给表加了个计算字段
XH=(Select Count(*) from List AS A where A.Local=B.Local and A.ID<B.ID)
就是这个计算字段的计算方法
这个例子中实际含义就是在所有LIST--AS A数据中和当前LIST---AS B的记录的LOCAL值相同
自增字段值比B的ID值小的数据个数,由于ID是自增字段无重复值,所以XH对于每个LOCAL的
数据一定是不同的,下面简单说个例子
假设原始数据这样
id name local age
1 a1 山东 10
2 a2 北京 10
3 a3 山东 10
4 a5 山东 10
5 a8 北京 10

Select id,Name,Local,Age,
XH=(Select Count(*) from List AS A where A.Local=B.Local and A.ID<B.ID)
的结果就是
id name local age xh
1 a1 山东 10 0(所有数据有三个山东的,但ID比1小的没有)
2 a2 北京 10 0(所有数据有二个北京的,但ID比2小的没有)
3 a3 山东 10 1(所有数据有三个山东的,但ID比3小的有1个)
4 a5 山东 10 2(所有数据有三个山东的,但ID比4小的有2个)
5 a8 北京 10 1(所有数据有二个北京的,但ID比5小的有1个)
这样的结果你按XH先排序,自然就是等于0的在前面,它们的LOCAL一定不一样



 
多谢onedot的详细指点!终于明白了这种排序的算法思想~ [:D][:D]高兴!
》Select id,Name,Local,Age,
》XH=(Select Count(*) from List AS A where A.Local=B.Local and A.ID<B.ID)
》的结果就是
》id name local age xh
》1 a1 山东 10 0(所有数据有三个山东的,但ID比1小的没有)
》2 a2 北京 10 0(所有数据有二个北京的,但ID比2小的没有)
》3 a3 山东 10 1(所有数据有三个山东的,但ID比3小的有1个)
》4 a5 山东 10 2(所有数据有三个山东的,但ID比4小的有2个)
》5 a8 北京 10 1(所有数据有二个北京的,但ID比5小的有1个)
》这样的结果你按XH先排序,自然就是等于0的在前面,它们的LOCAL一定不一样

order by XH,Local排完序就是这样了:
id name local age xh
1 a1 山东 10 0(所有数据有三个山东的,但ID比1小的没有)
2 a2 北京 10 0(所有数据有二个北京的,但ID比2小的没有)
3 a3 山东 10 1(所有数据有三个山东的,但ID比3小的有1个)
5 a8 北京 10 1(所有数据有二个北京的,但ID比5小的有1个)
4 a5 山东 10 2(所有数据有三个山东的,但ID比4小的有2个)

先按照XH排序,由小到大,这样local就会由山东-北京这样的循环出现了。
终于明白了:加上一个XH字段的玄妙之处在于此,XH是一个标志数量的东东,
按照XH排序就会有惊人的效果! [:D][:D][:D]

再次谢谢onedot老兄!
假如今天我什么都不做,我把这种排序思想学会了,我认为我今天是有进步的! [:)]

结贴送分了!
 
后退
顶部