2017-12-29 13 views
3

レコードでいくつかのフィルタを使用してビューを作成しましたが、別のテーブルのIDとSQL結果の最後に特定の行を含む行を追加する必要があります。SQLの最後に行を追加するUNIONを使用して選択する

そこで期待される結果は、そのようなものである:

Column 1 | Column 2 | Column 3 | Column4 
1 0001  | 565  | AM1  | DR01 
. 
. 
59 TEST1 |   |   | 
60 NON_IMMO |   |   | 

ライン59は、第二のテーブルからIDであり、線60はspecifix行です。 私のクエリはそのようなものです:

SELECT DISTINCT a.asset_id 
, a.serial_id 
, a.VIN 
, b.project_id 
    FROM ps_asset a 
WHERE --Some conditions 
    UNION 
SELECT PO_GROUP_ID 
,' ' 
, ' ' 
, ' ' 
    FROM PS_PO_GROUP_TBL 
    UNION 
SELECT 'NON_IMMO' 
,' ' 
,' ' 
,' ' 
    FROM dual 

しかし、問題は、私が最後に特定の行を取得しない、これを使用しています。

アルファベット順に並べられた2つのユニオンをSGBDで見せているような気がします。

Column 1 | Column 2 | Column 3 | Column4 
1 0001  | 565  | AM1  | DR01 
. 
. 
59 NON_IMMO |   |   | 
60 TEST1 |   |   | 

ありがとうございました。

答えて

2

最後のUNIONUNION ALLに変更して、重複の削除をスキップします(これは、副次的な効果として行を並べ替えます)。それが十分でなければなりません...

... 
FROM PS_PO_GROUP_TBL 
UNION ALL 
SELECT 'NON_IMMO' 
... 
+0

を取り除くため、DISTINCT削除はい、あなたは右のこの特定の行のために私は 'UNION ALL'が仕事をする理由です、私は重複行を持っていないと確信しています。 –

2

UNIONはレコードを強制的に注文するつもりはありません。データが最後まで確実に流れるようにするには、別の誤った第5列が必要です。あなたのデータは、おそらく最後に何をマッチング場合などに

SELECT COLUMN1 
FROM 
(
SELECT COLUMN1, 0 ORDER_BY FROM TABLE1 
UNION 
SELECT 'FOOTER' COLUMN1, 1 ORDER_BY FROM DUAL 
) 
ORDER BY ORDER_BY 

を参照してください。また、あなたはまだ追加されるレコードを確保するために代わりに、UNION ALLを使用することをお勧めします。

0

あなたのクエリはなります:

あなたは

することにより、第2のグローバルORDERを適用することができます一つのメインクエリでクエリをラップする必要があります:私はしましたUNIONが重複

SELECT asset_id, serial_id, vin, project_id 
FROM 
(SELECT a.asset_id, a.serial_id, 
    a.VIN, b.project_id 
FROM ps_asset a 
WHERE --Some conditions 
UNION 
SELECT PO_GROUP_ID, ' ', ' ', ' ' 
FROM PS_PO_GROUP_TBL 
UNION 
SELECT 'NON_IMMO', ' ', ' ', ' ' 
FROM dual) 
ORDER BY serial_id 
関連する問題