order byした表同士をUNIONしようとするとエラーで弾かれます。
副問い合わせ+OFFSET FETCHを指定すると正常に実行可能です。
テストテーブル作成
SQL
--テストテーブル作成
create table #testA
(
[ID] int,
[score] int
)
create table #testB
(
[ID] int,
[score] int
)
--テストデータ挿入
insert into
[#testA]
values
(2,78),
(3,91),
(1,65)
insert into
[#testB]
values
(2,48),
(7,58),
(1,82)
SQL実行例
↓これは実行不可
SQL
--実行不可
select * from [#testA] order by [ID]
UNION ALL
select * from [#testB] order by [ID]
SQL↓副問い合わせとOFFSET FETCHを指定すれば実行可能
SQL
--実行可能
--OFFSET → スキップする行数
--FETCH NEXT → OFFSET後に取得する行数
select * from
(select * from [#testA] order by ID OFFSET 0 ROWS FETCH NEXT 9999 ROWS ONLY) as [a]
UNION ALL
select * from
(select * from [#testB] order by ID OFFSET 0 ROWS FETCH NEXT 9999 ROWS ONLY) as [b]
SQL【結果】
ID | score |
1 | 65 |
2 | 78 |
3 | 91 |
1 | 82 |
2 | 48 |
7 | 58 |