日期:2014-05-17  浏览次数:20797 次

SQL查询语句中随机排序的问题
代码如下:
select * from(select top 100 PERCENT * from AreasAssociation
where RegularSort is not null and RegularSort>0 and PositionID=2 and CrabType=1 order by RegularSort) a
union all
select * from(
select top 100 PERCENT * from AreasAssociation where Sort is not null and PositionID=2 and CrabType=1
and ID not in(select ID from AreasAssociation where RegularSort is not null and 
RegularSort>0 and PositionID=2 and CrabType=1) ORDER BY newID()) b
union all
select * from  AreasAssociation where Sort is null and PositionID=2 and CrabType=1
我想要的效果是中间的一段代码能够随机排序,也就是每刷新一次,显示出来的结果,是不一样的,中间的代码是单独试过了,能够随机排序,但是放在一起就没那个效果了,求指导。。
随机排序 sql

------解决方案--------------------
有个笨方法,就是建个临时表,字段与你的表字段一致,多加一列自增列,
然后把数据按你规定的顺序,分别插入临时表
然后按照自增列的排序查询出临时表
------解决方案--------------------
单独查询的时候数据的排序会按照你的order by指定顺序
如若不指定,则按照聚集索引排序,如果没有聚集索引会按照数据录入的顺序输出
以你句子为例,
select * from(select top 100 PERCENT * from AreasAssociation
where RegularSort is not null and RegularSort>0 and PositionID=2 and CrabType=1 order by RegularSort) a
在()内部查询会正常按照order by的顺序排序,但是在外层select * from()a
并没有指定顺序,所以顺序应该是乱序的(或者聚集索引顺序)