首页 新闻 会员 周边 捐助

SQL 纠结的排序

0
悬赏园豆:20 [待解决问题]
表格的数据
ColName    Value    Ct    ColCount
K1           3       3       2
K1           1       2       2
K3           2       3       2
K3           5       2       2
K5           4       4       2
K5           5       3       2
K2           2       3       3
K2           3       2       3
K2           1       2       3
K4           1       2       3
K4           3       2       3
K4           5       2       3
大致的思路是这样的:ColName 表示名称、Value表示位置、Ct表示次数,ColCount表示名称出现的行数;
先取ColName行数最小的,并且相同,没有相同就一个,ColCount表示行数,
这样K1 K3 K5的ColCount相同并且最小,所以针对K1 K3 K5排序,
K1 Value为3出现3次,Value为1出现2次,所以K1排到第3;
K3 Value为2出现3次,Value为5出现2次,所以K3排2;
K5 Value为4出现4次,Value为5出现3次,所以K5排第4;
然后再取下一个相同行数,实际就是ColCount相等,K2 K4ColName行数相同为3,所以后计算;
K2 Value为2出现3次,Value为3出现2次,Value为1出现2次;本应该取2,但是第二已经给K3排了,所以取后面的3,但是3也被K1排了,所以K2只能取1;
K4 Value为1出现2次,Value 为3出现2次,Value为5出现2次;所以K4 取 1、3都已经被取了,所以只能取5;所以K4排5;
查询排序的结果就如下
1    K2   
2    K3   
3    K1       
4    K5       
5    K4   
 
ColName 表示名称、Value表示值、Ct表示次数,ColCount表示名称出现的行数;
首先,ColCount为2的排;同一个名称取Ct大的Value值;
比如:K1 Ct大的Value值就是3,K1 Ct有2,3,所以Ct等于3大,取对应的VALUE 3,所以K1就排3;
K3 Ct最大的对应的Value就是2 所以K3排2;
K5 Ct最大的对应的Value为4;所以K5排4;
其次,排ColCount为3的;同一个名称取Ct大的Value值,如果Value已经排了,就往下面取,
K2 Ct最大的对应的Value是2,因为2在上面已经给K3排了,所以取下一个Value 3;而3也被取了,所以再下一个Value 1 所以K2排1;
K4 也是这样取...所以K4排5
 
下面是测试数据
CREATE TABLE Test1
(
 
    ColName VARCHAR(20),
    Value INT,
    Ct INT,
    ColCount Int
)
 
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K1',3,3,2)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K1',1,2,2)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K3',2,3,2)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K3',5,2,2)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K5',4,4,2)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K5',5,3,2)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K2',2,3,3)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K2',3,2,3)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K2',1,2,3)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K4',1,2,3)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K4',3,2,3)
INSERT INTO Test1(ColName,Value,Ct,ColCount) VALUES('K4',5,2,3)
 
SQL
v_Bin的主页 v_Bin | 菜鸟二级 | 园豆:271
提问于:2013-12-30 13:47
< >
分享
所有回答(1)
0

看的不是太明白。

aehyok | 园豆:1212 (小虾三级) | 2014-01-12 22:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册