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 在查看的时候再进行排序
例如在你用这个视图的时候
select * from yourviewname order by b
[解决办法]
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
[解决办法]
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
[解决办法]