2017-03-01 4 views
0

Ich muss eine Gruppe von Ergebnissen zuerst in einer Liste anzeigen und dann den Rest der Ergebnisse aus der folgenden Tabelle zeigen.Bestellung der Ergebnisse mit einer Union aus der gleichen Tabelle

Ich habe versucht SQL: how to use UNION and order by a specific select?, aber es scheint nicht in meinem Fall zu arbeiten.

Meine Abfrage sieht wie folgt aus

SELECT * FROM (
    SELECT id, display as ordered 
     FROM table 
    WHERE id in (...) --these need to be first 
    UNION 
    SELECT id, display 
     FROM table 
    WHERE id not in (...) --these need to be at the end 
) 
ORDER BY ordered 

Meine Ergebnisse sind wieder alle von Display bestellt kommen, unabhängig davon, was ich tue.

Ich benutze Oracle, BTW.

Danke für die Hilfe.

Antwort

5

Sie müssen Zahlen explizit eingeben, um die Bestellung zu erhalten. Diese Abfrage sortiert das erste Ergebnis zuerst und dann das zweite. In jeder Gruppe sind die Ergebnisse wiederum nach ID geordnet. (Es entfernen, wenn nicht erforderlich)

SELECT id,display FROM (
    SELECT id, display,1 as ordered 
     FROM table 
    WHERE id in (...) --these need to be first 
    UNION 
    SELECT id, display,2 
     FROM table 
    WHERE id not in (...) --these need to be at the end 
) 
ORDER BY ordered,id 
+0

wow, vielen Dank für die schnelle Antwort. Präfekt danke –

+0

@RobM Würdest du in Betracht ziehen, die Antwort dann zu akzeptieren? Mehr Nutzer werden auf diese Weise profitieren. –

1

Ich glaube, Sie sollten dies tun, wie:

select id, display 
from table 
order by (case when id in (. . .) then 1 -- first list 
       when id in (. . .) then 3 -- last list 
       else 2      -- everything else 
      end); 

Es besteht keine Notwendigkeit für union oder union all. Nur eine einzige order by Ausdruck.

Sie sollten eine where Klausel einschließen, wenn Sie nicht alle IDs möchten.

(ich finde Ihre Frage ein wenig unklar, was die Listen dar. Sie not in verwenden können, wenn das wirklich angemessen ist.)

+0

... und, falls erforderlich, ID (oder was auch immer) als sekundäres Ordnungskriterium hinzufügen – mathguy

Verwandte Themen