sql排序的问题
这是sqlserver数据库里的表格数据,我想通过这两列来实现排序,现在的顺序是通过orderbyBeforeGrouping,place查询出来的结果就是如此,如今我希...
这是sqlserver数据库里的表格数据,我想通过这两列来实现排序,现在的顺序是通过order by BeforeGrouping,place查询出来的结果就是如此,如今我希望排序是
第1行 01 1 第1行和第2行挨着,顺序可以不管
第2行 02 2
第3行 01 2 第3行和第4行挨着,顺序可以不管
第4行 02 1
(不能利用这些数据本身的数值来排序,因为这些都是会变的,比如 01,02可能是 A,B
Place 的 1,2 可能会是 3,4 ) 展开
第1行 01 1 第1行和第2行挨着,顺序可以不管
第2行 02 2
第3行 01 2 第3行和第4行挨着,顺序可以不管
第4行 02 1
(不能利用这些数据本身的数值来排序,因为这些都是会变的,比如 01,02可能是 A,B
Place 的 1,2 可能会是 3,4 ) 展开
3个回答
展开全部
为什么要第一行和第二行挨着?他们有什么共同之属性吗?如果用ORDER BY PLACE,BEFOREGROUPING 排序,就会得到这样的结果
第1行 01 1
第4行 02 1
第3行 01 2
第2行 02 2
这样排序要是不行,你就必须要第三列的参数来确定谁和谁挨着,就是说,谁和谁挨着,是因为他们共有某属性,这个共有属性,就是靠第三列来完成。否则的话,逻辑上说不通。
比如,这个属性列叫作组别,这样:
ORDER BY 组别,BEFOREGROUPING,PLACE
查询结果:
组别 BEFOREGROUPING PLACE
1 01 1
1 02 2
2 01 2
2 02 1
第1行 01 1
第4行 02 1
第3行 01 2
第2行 02 2
这样排序要是不行,你就必须要第三列的参数来确定谁和谁挨着,就是说,谁和谁挨着,是因为他们共有某属性,这个共有属性,就是靠第三列来完成。否则的话,逻辑上说不通。
比如,这个属性列叫作组别,这样:
ORDER BY 组别,BEFOREGROUPING,PLACE
查询结果:
组别 BEFOREGROUPING PLACE
1 01 1
1 02 2
2 01 2
2 02 1
更多追问追答
追问
首先谢谢你,你仅仅是用着两列在交换排序,这样当然是不行的嘛,有时候排序可以利用数据库提供的一些函数,条件配合进行嘛,我不知道如何搭配,来实现,
第一列的意思是组别,第二列的意思是排名,意思就是要第一组的1名和第二组的2名挨着,第二组的1名和第一组的2名挨着
追答
您还是只是列举,并没有说出规则,如果有第三名呢?有没有第三组呢?每组只有一个第一名或第二名吗?
单就你列举的数据,总结一下规律,是不是象交叉比赛一样呢?那么如果组别和名次都是数值型就可以这样:
ORDER BY ABS(CONVERT(INT,BEFOREGROUPING)-CONVERT(INT,PLACE))
即,以组别与名次之差的绝对值来排序。如果你的PLACE或组别是字符型,就需要先作个视图,按字符顺序添写成序数。这应该就不是本问题的要点了。
展开全部
为什么不用代码来实现呢?你的规则改不会和世界杯比赛8分之一角色的配对类似吧?用代码实现比较好吧!
追问
用代码已经实现了,就是想看sql排序能不能解决,代码实现很容易,我是在想如果要成做存储过程或者函数,只需要在程序里面调用就好了。
追答
你能确定每组只取一二名还是有其他规则?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以把规则解释一下,因为不一定非要用排序解决
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询