如何通过多个联合语句的结果进行排序?

RJ.*_*RJ. 1 sql sql-server sql-order-by common-table-expression sql-server-2008

我不能使用公用表表达式:

WITH    cte
          AS (SELECT    [StationID],
                        [LastDistribution]
              FROM      [DB1].[dbo].[ProcessingStations]
              UNION ALL
              SELECT    [StationID],
                        [LastDistribution]
              FROM      [DB2].[dbo].[ProcessingStations]
              UNION ALL
              SELECT    [StationID],
                        [LastDistribution]
              FROM      [DB3].[dbo].[ProcessingStations]
              UNION ALL
              SELECT    [StationID],
                        [LastDistribution]
              FROM      [DB4].[dbo].[ProcessingStations]
              UNION ALL
              SELECT    [StationID],
                        [LastDistribution]
              FROM      [DB5].[dbo].[ProcessingStations]
              ORDER BY  [StationID]
              UNION ALL
              SELECT    [StationID],
                        [LastDistribution]
              FROM      [DB6].[dbo].[ProcessingStations]
              UNION ALL
              SELECT    [StationID],
                        [LastDistribution]
              FROM      [DB7].[dbo].[ProcessingStations]
              UNION ALL
              SELECT    [StationID],
                        [LastDistribution]
              FROM      [DB8].[dbo].[ProcessingStations])
    SELECT  *
    FROM    cte
    ORDER BY StationID
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

val*_*rij 5

把它放在ORDER BY你的SELECT ... FROM ... UNION ALL陈述链的末尾:

SELECT    [StationID],
          [LastDistribution]
          FROM      [DB1].[dbo].[ProcessingStations]
          UNION ALL
          SELECT    [StationID],
                    [LastDistribution]
          FROM      [DB2].[dbo].[ProcessingStations]
          UNION ALL
          SELECT    [StationID],
                    [LastDistribution]
          FROM      [DB3].[dbo].[ProcessingStations]
          UNION ALL
          SELECT    [StationID],
                    [LastDistribution]
          FROM      [DB4].[dbo].[ProcessingStations]
          UNION ALL
          SELECT    [StationID],
                    [LastDistribution]
          FROM      [DB5].[dbo].[ProcessingStations]
          ORDER BY  [StationID]
          UNION ALL
          SELECT    [StationID],
                    [LastDistribution]
          FROM      [DB6].[dbo].[ProcessingStations]
          UNION ALL
          SELECT    [StationID],
                    [LastDistribution]
          FROM      [DB7].[dbo].[ProcessingStations]
          UNION ALL
          SELECT    [StationID],
                    [LastDistribution]
          FROM      [DB8].[dbo].[ProcessingStations]
ORDER BY StationID
Run Code Online (Sandbox Code Playgroud)

这是我在SSMS中做的一个简单示例:

DECLARE @a table (x int)
DECLARE @b table (x int)
DECLARE @c table (x int)

insert into @a values (5)
insert into @a values (4)
insert into @a values (3)

insert into @b values (0)
insert into @b values (1)
insert into @b values (2)

insert into @c values (0)
insert into @c values (1)
insert into @c values (2)

select * from @a
union all
select * from @b
union all
select * from @c
order by x
Run Code Online (Sandbox Code Playgroud)

这是输出:

  x
-----
  0
  0
  1
  1
  2
  2
  3
  4
  5
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,即使SELECT * FROM @a是第一个,它仍然将最后一个放在结果集中

  • @Rj. - 那是不对的.在`UNION`或`UNION ALL'链的末尾的`ORDER BY`对*整个*`UNION`应用一个排序. (2认同)