73

以下のSQLクエリを試しました:

SELECT * FROM (SELECT * 
FROM TABLE_A ORDER BY COLUMN_1)DUMMY_TABLE
UNION ALL 
SELECT * FROM TABLE_B 

次のエラーが発生します。

TOPまたはFOR XMLが指定されていない限り、ビュー、インライン関数、派生テーブル、サブクエリ、および共通テーブル式では、ORDER BY句は無効です。

ユニオンオールでオーダーバイを使用する必要があります。どうすればこれを達成できますか?

4

6 に答える 6

128
SELECT  * 
FROM 
        (
            SELECT * FROM TABLE_A 
            UNION ALL 
            SELECT * FROM TABLE_B
        ) dum
-- ORDER BY .....

ただし、結果リストの一番上からすべてのレコードをTable_A取得したい場合は、順序付けに使用できるユーザー定義値を追加できます。

SELECT  * 
FROM 
        (
            SELECT *, 1 sortby FROM TABLE_A 
            UNION ALL 
            SELECT *, 2 sortby FROM TABLE_B
        ) dum
ORDER   BY sortby 
于 2013-03-18T05:19:14.320 に答える
49

括弧を付ける必要はありません。直接並べ替えることができます:

SELECT *, 1 AS RN FROM TABLE_A
UNION ALL 
SELECT *, 2 AS RN FROM TABLE_B
ORDER BY RN, COLUMN_1
于 2015-05-25T15:16:11.153 に答える
0

次のようなことをする必要がある場合があります。

あるソートに基づいて表 1 から上位 5つを
取り出し、別のソートに基づいて表 2 から下位 5 つを取り出し
、これらを結合します。

解決

select * from (
-- top 5 records
select top 5 col1, col2, col3 
from table1 
group by col1, col2
order by col3 desc ) z 

union all

select * from (
-- bottom 5 records 
select top 5 col1, col2, col3 
from table2 
group by col1, col2
order by col3 ) z 

これがエラーを回避でき、私にとってはうまくいった唯一の方法でした。

于 2021-04-16T14:14:39.883 に答える