使用 CTE 对 T-SQL 联合查询进行排序

Ric*_*ick 0 sql t-sql sql-server sql-order-by common-table-expression

我需要对 T-SQL 联合查询进行排序。无论我如何编写查询,一旦引入该ORDER BY子句,我都会收到语法错误。

关键字“order”附近的语法不正确

T-SQL查询

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 无效的

Dal*_*e K 6

添加专门用于订购的附加列,但不要选择它,例如

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)