表A ID 为递增的种子,
ID Name
1000 glass
1001 glass
1003 towel
1004 glass
1005 soap
1006 hook
... ...请问如何实现下面的排列(就是根据NAME的升序循环排序)不知道大家明白我的意思么?谢谢!
1004 glass
1006 hook
1005 glass
1003 towel
1001 glass
1000 glass
ID Name
1000 glass
1001 glass
1003 towel
1004 glass
1005 soap
1006 hook
... ...请问如何实现下面的排列(就是根据NAME的升序循环排序)不知道大家明白我的意思么?谢谢!
1004 glass
1006 hook
1005 glass
1003 towel
1001 glass
1000 glass
2 mxxxj
3 hikj
4 vxvde
5 lvvvv
6 bxxc要怎么排?
先最靠前的 bxxc 再 取仅次于它的 glass
然后再取除已排过序的最靠前的 hikj 再取仅次于它的 lvvvv
再取除已排过序的最靠前的 mxxxj 再取仅次它的 vxvde
这样排下来就是按 name 顺序排.楼主你的要求有意思吗?除非你按name中多次出现的一个值循环升降排序。
1 glass
2 mxxxj
3 hikj
4 vxvde
5 lvvvv
6 bxxc应该是得到以下的排列 因为NAME没有重复的,相当于NAME升序走一次循环,如果是多次循环的话同样的Name,首先出现的应该是ID最大的。谢谢
6 bxxc
1 glass
3 hikj
5 lvvv
2 mxxxj
4 vxvde
IF 表中有Name重复的记录
WHILE 重复的记录未排完
按规则一排
按规则2排
Else
按规则2排是这样吧。20分太少了,花不来,不做,其实就是写循环,没意思。
ID Name
1000 glass
1001 glass
1003 towel
1004 glass
1005 soap
1006 hook應該為
1004 glass
1006 hook
1003 towel
1005 glass
1001 glass
1000 glass這個才對啊。
1004 glass
1006 hook
1005 soap
1003 towel
1001 glass
1000 glass
Create Table A
(ID Int,
Name Varchar(10))
Insert A Select 1000, 'glass'
Union All Select 1001, 'glass'
Union All Select 1003, 'towel'
Union All Select 1004, 'glass'
Union All Select 1005, 'soap'
Union All Select 1006, 'hook'
GO
Select * From A B Order By (Select Count(ID) From A Where Name=B.Name And ID>=B.ID),Name
GO
Drop Table A
--Result
/*
ID Name
1004 glass
1006 hook
1005 soap
1003 towel
1001 glass
1000 glass
*/
(ID Int,
Name Varchar(10))
Insert A Select 1001, 'glass'
Union All Select 1002, 'mxxxj'
Union All Select 1003, 'hikj'
Union All Select 1004, 'vxvde'
Union All Select 1005, 'lvvvv'
Union All Select 1006, 'bxxc'
GO
Select * From A B Order By (Select Count(ID) From A Where Name=B.Name And ID>=B.ID),Name
GO
Drop Table A
--Result
/*
ID Name
1006 bxxc
1001 glass
1003 hikj
1005 lvvvv
1002 mxxxj
1004 vxvde
*/
那就不知道他在说什么了。自己说的要循环排的。幸亏我没写,要不然,他说你这样写是对的,我要吐血了。
----------------------------------------
我這寫的也是類似一個循環的.還有,他開始弄錯了,頂樓的結果和數据都對不上的.