1

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

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

我该怎么做呢?

4

3 回答 3

5

只需将 the放在语句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

这是我在 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

这是输出:

  x
-----
  0
  0
  1
  1
  2
  2
  3
  4
  5

如您所见,即使SELECT * FROM @a排在第一位,它仍然将排在最后的排在结果集中

于 2013-04-10T13:55:20.563 回答
4

为什么你不能用一个CTE?。无论如何,您仍然可以使用派生表执行相同操作:

SELECT *
FROM (  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]
        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]) A
ORDER BY StationID
于 2013-04-10T13:48:31.630 回答
0

小提琴,只需将ORDER BY最后一组设置为“联合”即可。它在没有 CTE 开销的情况下实现了相同的结果。

该命令将影响整个统一集。

SELECT
        [StationID],
        [LastDistribution]
    FROM 
        [dbo].[ProcessingStations]
UNION ALL
SELECT
        [StationID],
        [LastDistribution]
    FROM 
        [dbo].[ProcessingStations]
UNION ALL
SELECT
        [StationID],
        [LastDistribution]
    FROM 
        [dbo].[ProcessingStations]
    ORDER BY
        [StationID]
于 2013-04-10T14:02:27.090 回答