sql2005中order by在子查询和视图中没有作用,如何解决。

木易随风 2010-01-19 10:21:59
在SQL2005的视图中使用了ORDER BY子句,但是结果返回程序客户端后并没有按条件排序,2000中是可以的,这个可以解决吗?
还有,如果在子查询中使用了ORDER BY子句,也不起作用,只有最外层的才起作用,如何解决。
...全文
296 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
select * from
(
select top 99999 * from
(
select 1 id,'一' col
union all
select 2 id,'二' col
union all
select 3 id,'三' col
)
a order by id desc
union all
select top 100 percent * from
(
select 4 id,'b' col
union all
select 5 id,'c' col
union all
select 6 id,'d' col
union all
select 7 id,'e' col
)b
) aa


这样可以排
木易随风 2010-01-19
  • 打赏
  • 举报
回复
唉!
SQL77 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 shuchong1983 的回复:]
    是啊 2000里用着挺方便的,怎么2005都取消了呢,尤其第一个,这样还得把排序写到程序了,以后要改排序都得动程序的,没有方法解决,比如说补丁啥的。
    第二个还好点,想其他方法可以实现,不过也很不方便的。
[/Quote]
已经不行了05的
xman_78tom 2010-01-19
  • 打赏
  • 举报
回复
LZ 不会在视图中使用 TOP 100 PERCENT ... ORDER BY 语句,让视图生成排序的数据吧。

在视图定义中使用 TOP 100 PERCENT ... ORDER BY 语句,SQL SERVER 也不能保证视图返回的数据按顺序排列,SQL SERVER 2K5 的查询优化器会忽略这样的排序操作。
木易随风 2010-01-19
  • 打赏
  • 举报
回复
是啊 2000里用着挺方便的,怎么2005都取消了呢,尤其第一个,这样还得把排序写到程序了,以后要改排序都得动程序的,没有方法解决,比如说补丁啥的。
第二个还好点,想其他方法可以实现,不过也很不方便的。
SQL77 2010-01-19
  • 打赏
  • 举报
回复
只有最外层的才起作用

你在外层排序就行了
SQL77 2010-01-19
  • 打赏
  • 举报
回复
2000中可以,2005中不确定,这个有解释的
木易随风 2010-01-19
  • 打赏
  • 举报
回复
提过了点数据,请各位帮忙看一下

--第一个问题的数据
--创建视图ABC
Create View ABC
as
SELECT TOP 100 PERCENT * FROM (
Select 1 id,'A' col
Union All
Select 2 id,'B' col
Union ALL
Select 3 id,'C' col
Union All
Select 4 id,'D' col
Union All
Select 5 id,'E' col
)A ORDER BY ID DESC
GO
--视图中按ID倒排序了,可直接查询视图ABC时,排序失效
SELECT * FROM ABC
GO
--删除视图ABC
Drop View ABC
GO

--第二个问题

--第一个子查询中指定了id倒排,可最后的查询结果中倒排失效,
--order by 只有写在最外层才可以的,如果里面的结果想排序怎么办。
SELECT * FROM
(
SELECT TOP 100 PERCENT * FROM
(Select 1 id,'一' col
Union All
Select 2 id,'二' col
Union ALL
Select 3 id,'三' col
) A ORDER BY id desc
Union All
SELECT TOP 100 PERCENT * FROM
(
Select 4 id,'B' col
Union ALL
Select 5 id,'C' col
Union All
Select 6 id,'D' col
Union All
Select 7 id,'E' col
)B
) AA
GO
vanjayhsu 2010-01-19
  • 打赏
  • 举报
回复
关注下,没遇到过。。。
--小F-- 2010-01-19
  • 打赏
  • 举报
回复
在SQL2005的视图中使用了ORDER BY子句,但是结果返回程序客户端后并没有按条件排序,2000中是可以的,这个可以解决吗?

这个需要数据来说明问题

还有,如果在子查询中使用了ORDER BY子句,也不起作用,只有最外层的才起作用,如何解决。

再嵌套一层
沉默肥牛 2010-01-19
  • 打赏
  • 举报
回复
同楼上,建议楼主提供详细的信息。
Mr_Nice 2010-01-19
  • 打赏
  • 举报
回复
请lz提供数据等信息。


34,571

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧