1

次のクエリを使用しています。

select 8 Union Select 0 Union Select 15 

これらの 3 つの数値を列に入力します。私が得る結果は次のとおりです。

0  
8  
15

しかし、私は8が最初に来て、次に0、そして15が来るようにしたいです。

8  
0  
15

どうすればいいですか?

4

2 に答える 2

3

UNION ALL を使用する例

select 8 UNION ALL Select 0 UNION ALL Select 15 
于 2012-12-19T15:59:02.207 に答える
2

@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
于 2012-12-19T17:05:54.377 に答える