2016-06-06 14 views
0

Ich habe Schwierigkeiten, mein Problem zu formulieren. Ich habe eine Sicht, die diese Ergebnisse bringt. Sie müssen der Ansicht eine Spalte hinzufügen, in der Round-Trip-Flüge mit identischer Nummer angezeigt werden.Spalte basierend auf Gruppierung anderer Werte erstellen

Flt_No From_Airport To_Airport Dep_Date   RequiredResult 
124 |LCA    |CDG  |10/19/14 5:00  1 
125 |CDG    |LCA  |10/19/14 10:00 1 
197 |LCA    |BCN  |10/4/12 5:00  2 
198 |BCN    |LCA  |10/4/12 11:00  2 
501 |LCA    |HER  |15/8/12 12:05  3 
502 |HER    |LCA  |15/8/12 15:15  3 

I.e. Der Flug 124 fährt von Larnaca nach CDG und der Flug 125 von CDG nach Larnaca - beide müssen denselben Identifikator haben.
Hin- und Rückflüge haben immer folgende Flugnummern.
Ich habe eine Reihe von Bedingungen, die ich jetzt nicht schreiben werde.
Stunden auslassen ist keine Option, sie sind wichtig.
Ich dachte dense_rank(), aber ich weiß nicht, wie man eine Kennung für 2 Flüge mit unterschiedlichen Nummern erstellen, bitte helfen.

+0

Welches Paar von Flügen erhält den Wert '1' in' RequiredResult'? –

+0

Was meinst du mit "mit identischer Nummer"? Diese Rundreise hat 2 verschiedene Flt_no? – LukStorms

+0

@Luk Storms ja es hat 2 verschiedene Flt_No, und was ich brauche, ist eine Spalte hinzufügen, die 1 identische Nummer für beide von ihnen enthalten wird. – Cat

Antwort

0

Wenn Ihre Daten sind ähnlich wie die Beispieldaten geschrieben, dann sollte die folgende Abfrage gibt den erforderlichen Ergebnis:

SELECT *, 
     DENSE_RANK() OVER (ORDER BY CASE 
             WHEN From_Airport < To_Airport THEN From_Airport 
             ELSE To_Airport 
            END) 
FROM mytable 
+0

Es tut wirklich, was ich fragte, ich muss nur herausfinden, wie und irgendwie die anderen Bedingungen hinzufügen, die ich habe .. danke! – Cat

+0

@Cat Glad Ich konnte helfen. Bitte markieren Sie diese oder eine andere Antwort als akzeptiert, wenn sie Ihnen bei der Lösung Ihres Problems geholfen hat. –

0

Verbindungsbedingungen sind nicht auf einfache Gleichheit beschränkt. Unter der Annahme, {Flugnummer, Abflug, Destination} ist einzigartig an einem Tag, dann kommt eine selbst es tun soll:

select whatever 
from flights outbound 
    inner join flights inbound on outbound.flt_no+1 = inbound.flt_no 
          and cast(outbound.dep_date, date) 
           = cast(inbound.dep_date, date) 
          and outbound.From_Airport = inbound.To_Airport 
          and outbound.To_Airpott = inbound.From_Ariport 
+0

Ich verstehe Ihre Antwort nicht ganz ... Wo ist die neue Spalte, die mein Hauptziel ist? Und werden nicht beitreten nur die Ergebnisse in Zeilen verteilen? Ich brauche sie genau wie in meinem Beitrag aussehen – Cat

+0

@Cat Ersetzen Sie "was auch immer" mit der Spalte, die Sie wollen, verwenden Sie die Tabelle Alases "eingehende" und "ausgehende", um von jeder Seite der Verknüpfung auszuwählen. (Ich konnte das nicht tun, weil Sie nicht definieren, was die "identische Nummer" ist). – Richard

0

Ich dachte, ich würde es in Notepad versuchen.

select 
flt_no, from_airport, to_airport, dep_date, 
dense_rank() over (order by 
    convert(varchar,dep_date, 112), 
    (case when from_airport < to_airport then coalesce(from_airport, to_airport) else coalesce(to_airport, from_airport) end) 
) as RankNum 
from flights;