您的位置:首页 > 其它

UNION ALL 和 ORDER BY NEWID 一起使用

2012-03-09 17:37 483 查看
当使用UNION ALL或者UNION时,如果按照NewId()随机排序,那么,不能直接写

SQL 代码

SELECT

TOP

2

*

FROM

[
Article
]

Where
ArticleId
<

100

Order

By

NewId
()

UNION

ALL

SELECT

TOP

8

*

FROM

[
Article
]

Where
ArticleId
>

200

Order

By

NewId
()


如果这样写,运行时会报告错误:在关键字 'UNION' 附近有语法错误。

需要写成

SQL 代码

SELECT

*

FROM
(
SELECT

TOP

2

*

FROM

[
Article
]

Where
ArticleId
<

100

Order

By

NewId
()) A

UNION

ALL

SELECT

*

FROM
(
SELECT

TOP

8

*

FROM

[
Article
]

Where
ArticleId
>

200

Order

By

NewId
()) B


但是,这些,在SQL Server 2008里面是正确的,但在SQL Server2000里面,仍然会报告错误:如果语句中包含 UNION 运算符,那么 ORDER BY 子句中的项就必须出现在选择列表中。
在SQL Server 2000里面,需要写成

SQL 代码

SELECT

*

FROM
(
SELECT

TOP

2

*
,
NewId
()
As
RandomX
FROM

[
Article
]

Where
ArticleId
<

100

Order

By
RandomX) A

UNION

ALL

SELECT

*

FROM
(
SELECT

TOP

8

*
,
NewId
()
As
RandomX
FROM

[
Article
]

Where
ArticleId
>

200

Order

By
RandomX) B


才可以正常执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UNION ALL ORDER BY NEWID