1

私はこれらのクエリを持っています:

(SELECT * FROM product WHERE var<>'0'ORDER BY date DESC) 

(SELECT * FROM product WHERE var='0' ORDER BY date DESC).

2つの結果を1つに統合しようとすると

 (SELECT * FROM product WHERE var<>'0'ORDER BY date DESC) 
 UNION 
 (SELECT * FROM product WHERE var='0' ORDER BY date DESC)

結果は順序を失います...結果のセットには、最初にvarがゼロではないすべてのレコードがあり、次にvarがゼロのすべてのレコードがありますが、日付順に並べられていません...単独で順序が機能しています...なぜですか?で一意の順序を使用しようとしましたが、結果はvarがゼロに等しいかゼロでないレコードを混合します...

4

3 に答える 3

5

最後に注文を適用する必要があります。

SELECT * FROM product WHERE var<>'0'
UNION 
SELECT * FROM product WHERE var='0'
ORDER BY date DESC

代わりに両方の部分の順序を保持する場合は編集var<>'0'します。したがって、最初に(内部で順序付けられたdate DESC)で、次にすべてでvar='0'(内部的に順序付けられたdate DESC)で:

SELECT * FROM product WHERE var<>'0'
UNION 
SELECT * FROM product WHERE var='0'
ORDER BY 
    CASE WHEN var<>'0' THEN 0 ELSE 1 END ASC,
    date DESC
于 2013-01-03T15:13:55.610 に答える
2

あなたがやろうとしているのは、結果セットを'0'最後に並べてから、各サブセットを日付順に並べることだと思います。その場合、ユニオンを忘れて、代わりにこれを行うことができます。

SELECT *
FROM product
WHERE var IS NOT NULL
ORDER BY CASE WHEN var = '0' THEN 2 ELSE 1 END, date DESC
于 2013-01-03T15:21:34.843 に答える
0
SELECT * FROM product WHERE var<>'0'
UNION 
SELECT * FROM product WHERE var='0'
ORDER BY date DESC

と同等です:

SELECT * FROM product
ORDER BY date DESC
于 2013-01-03T15:15:02.477 に答える