Ric*_*ick 0 sql t-sql sql-server sql-order-by common-table-expression
我需要对 T-SQL 联合查询进行排序。无论我如何编写查询,一旦引入该ORDER BY子句,我都会收到语法错误。
关键字“order”附近的语法不正确
WITH s1
AS (select '1' as id
union
select '4' as id
union
select '2' as id
union
select '3' as id
union
select '5' as id
),
s2
AS (select '4' as id,
100 as val
union
select '1' as id,
500 as val
union
select '3' as id,
700 as val
union
select '2' as id,
800 as val
)
(select '9' as id,
700 as val) -- id 9 should stay on first row
UNION
(select s1.id,
s2.val
from s1
Left join s2
on s1.id = s2.id --Order by s2.val causing a syntax error )
Run Code Online (Sandbox Code Playgroud)
| ID | 瓦尔 |
|---|---|
| 1 | 500 |
| 2 | 800 |
| 3 | 700 |
| 4 | 100 |
| 5 | 无效的 |
| 9 | 700 |
| ID | 瓦尔 |
|---|---|
| 9 | 700 |
| 4 | 100 |
| 1 | 500 |
| 3 | 700 |
| 2 | 800 |
| 5 | 无效的 |
添加专门用于订购的附加列,但不要选择它,例如
SELECT id, val
FROM (
SELECT '9' AS id, 700 AS val, 1 AS SortOrder
UNION ALL -- Always use union all where you can for performance
SELECT s1.id, s2.val, 0 AS SortOrder
FROM s1
LEFT JOIN s2 ON s1.id = s2.id
) x
ORDER BY SortOrder DESC, val
Run Code Online (Sandbox Code Playgroud)