首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

ms sql视图中 排序有关问题(order by )

2012-03-27 
ms sql视图中 排序问题(order by )创建了一个 视图 其sql 如下:select * From (SELECT top 100 PERCENT a,

ms sql视图中 排序问题(order by )
创建了一个 视图 其sql 如下:
select * From (
SELECT top 100 PERCENT a,b,c  
FROM tb
WHERE DATEDIFF(day, b ,getdate())>=3 
order by b desc) asd 
union all
select * From (
SELECT top 100 PERCENT a,b,c  
FROM tb
WHERE DATEDIFF(day, b ,getdate())<3 
order by b asc) def

但是结果并没有按照 b 排序

union all 前后两个 sql 单独查询却是排序的结果,但是放在一个 view里面,其结果并不是按b排序。


[解决办法]
view 在查看的时候再进行排序
例如在你用这个视图的时候

SQL code
select * from yourviewname order by b
[解决办法]
SQL code
select a,b,c From (  SELECT 1 as px,a,b,c     FROM tb  WHERE DATEDIFF(day, b ,getdate())>=3    union all  SELECT 2 as px,a,b,c     FROM tb  WHERE DATEDIFF(day, b ,getdate())<3  ) torder by   px,  case when px=1 then -b else b end
[解决办法]
SQL code
create table hhh1(id int,col varchar(20))--这样创建视图无效create view hhh1viewasselect * from hhh1 order by col/*The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.*/--这种创建就可以了create view hhh1viewasselect * from hhh1 select * from hhh1view order by col
[解决办法]
探讨
SQL code
select a,b,c From (
SELECT 1 as px,a,b,c
FROM tb
WHERE DATEDIFF(day, b ,getdate())>=3
union all
SELECT 2 as px,a,b,c
FROM tb
WHERE DATEDIFF(day, b ,getdate())<3 ……

[解决办法]
最外面一层加一个order by 试试呢?
[解决办法]
探讨
引用:

最外面一层加一个order by 试试呢?

不行的。

[解决办法]
创建视图的语句中不要有ORDER BY子句,在从视图获取数据的语句中再添加ORDER BY子句。
[解决办法]
http://zhidao.baidu.com/question/129433916.html

视图是个查询结果集,是没有排序的,如果你使用了ORDER BY那么你必须于TOP关键字一起使用,这里ORDER BY 并不是对视图的结果进行排序,只是为了让TOP提取结果。
当使用视图做查询,出来的结果想要排序,还得使用order by
[解决办法]
理论上视图是不能排序的
order by 后是一种游标了
但是可以用top来转换

所以你的top要足够大,嘿嘿

热点排行