次のクエリを使用しています。
select 8 Union Select 0 Union Select 15
これらの 3 つの数値を列に入力します。私が得る結果は次のとおりです。
0
8
15
しかし、私は8が最初に来て、次に0、そして15が来るようにしたいです。
8
0
15
どうすればいいですか?
UNION ALL を使用する例
select 8 UNION ALL Select 0 UNION ALL Select 15
@SimonMartinの回答は、指定した正確なデータセットに対して機能しますが、データセットに重複する値が含まれている場合、 はUNION ALL
とは異なる結果になることに注意してくださいUNION
。
UNION
オペレーターは重複を削除しますUNION ALL
が、@SimonMartin の回答に記載されているように、それらの順序も保持します。
UNION
オペレータの機能と が提供する順序付け機能を組み合わせたい場合は、最初から重複する値を自分で除外するUNION ALL
必要があります。UNION ALL
-- baseline query + 1 duplicate record at the end
with query as
(
select 8 as Val
UNION ALL
Select 0 as Val
UNION ALL
Select 15 as Val
UNION ALL
Select 0 as Val
)
-- now add row numbers
, queryWithRowNumbers as
(
select row_number() over (order by (select 0)) as rn, Val
from query
)
-- finally, get rid of the duplicates
select Val from (
select Val, min(rn) as minRn
from querywithrownumbers
group by val
) q
order by minRn
これにより、次の結果が得られます
8
0
15
一方、使用するUNION ALL
だけの場合は、最終的には
8
0
15
0