最近在写Sql的时候出现了:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
逻辑上看着挺对 但是报错,因为,子查询中的数据是不唯一的。例子如下:
select * from
(select userid from dbo.test where ID>20 order by userID desc) AS tab
order by tab.userid
查了很多例子,大部分的解决办法是:
select * from
(select distinct TOP 100 PERCENT userid from dbo.test where ID>20 order by userID desc) AS tab
order by tab.userid
只要我们在嵌套子查询视图里面加入: top 100 PERCENT 即可。
也可以采用如下方法:
select distinct userid from
(select userid from dbo.test where ID>20 order by userID desc) AS tab
order by tab.userid
只是将过滤拿出去执行过滤重复,这样就可以了。在此做一个记录。