3 Stimmen

SQL-Abfrageergebnisse sollen in der Reihenfolge der manuell bereitgestellten Werte angezeigt werden.

Wir haben eine Datenbank von Kunden mit Treuekarten. Ich versuche, eine einfache SQL-Abfrage zu schreiben, die den vollständigen Namen eines Kunden basierend auf seiner Kartennummer abruft. Jedoch benötige ich ausdrücklich, dass die Ausgabe genau in der Reihenfolge erfolgt, in der ich die Kartennummern hinzugefügt habe. Wie kann ich das umsetzen?

Hier ist, was ich gemacht habe.

SELECT cardnumber, first_name || ' ' || last_name FROM cardholder WHERE
cardnumber LIKE '%1111%' OR
cardnumber LIKE '%2222%' OR
cardnumber LIKE '%3333%'

Ich sollte hinzufügen, dass ich mit SQL nicht sehr vertraut bin, was ich jetzt weiß, ist größtenteils das Ergebnis von Recherchen zu diesem speziellen Problem in den letzten Tagen.

Ihre Hilfe wird sehr geschätzt.

(Außerdem wäre ich dankbar für eine Möglichkeit, wie die Kartennummern einfach als ein einzelner Textblock in den Code eingefügt werden können, aber das ist nur ein Bonus.)

2voto

Michael Pakhantsov Punkte 24167
SELECT cardnumber, first_name || ' ' || last_name 
FROM (
     SELECT cardnumber, first_name, last_name, c.OrderNo
     FROM cardholder ch, (SELECT '%1111%' cardmask, 1 OrderNo from dual
                        UNION ALL
                        SELECT '%2222%', 2 OrderNo from dual
                        UNION ALL
                        SELECT '%3333%', 3 OrderNo from dual
                        ) c
     WHERE ch.cardnumber LIKE c.cardmask
     Order by c.OrderNo
) t

2voto

Justin Cave Punkte 220606

Sie müssten eine benutzerdefinierte ORDER BY-Klausel hinzufügen. Etwas wie

SELECT cardnumber, first_name || ' ' || last_name 
  FROM cardholder 
 WHERE cardnumber LIKE '%1111%' OR
       cardnumber LIKE '%2222%' OR
       cardnumber LIKE '%3333%'
 ORDER BY (CASE WHEN cardnumber LIKE '%1111%' THEN 1
                WHEN cardnumber LIKE '%2222%' THEN 2
                WHEN cardnumber LIKE '%3333%' THEN 3
                ELSE 4
            END) asc

0voto

plang Punkte 5156

Haben Sie eine Art von autoinkrementierten ID-Spalte als Primärschlüssel in Ihrer "Karteninhaber" -Tabelle? Wenn ja, und die Spalte lautet "id", könnten Sie einfach verwenden

SELECT-Kartennummer, Vorname || ' ' || Nachname AUS Karteninhaber ORDER BY id

Dadurch werden Ihre Kartennummern in der Reihenfolge sortiert, in der sie in die Datenbank eingefügt wurden.

Ihr Beispiel zeigt, dass Sie versuchen, Ihre Kartennummern inkrementell zu sortieren. Vielleicht suchen Sie also nach

SELECT-Kartennummer, Vorname || ' ' || Nachname AUS Karteninhaber ORDER BY Kartennummer

Ich hoffe das hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X