Angenommen, ich habe eine Tabelle mit Einträgen wie
%Vor% und für jede ID möchte ich diese Daten an sich selbst so verbinden, dass Beobachtungen mit nachfolgenden Departure Date
und Arrival Date
paarweise gruppiert werden - d. h. eine Abfahrt wird mit der vorherigen Ankunft für jede ID gepaart.
Im obigen Beispiel (wo die Beobachtungen der Einfachheit halber sortiert sind) wird die zweite Zeile an die 1., die 3. bis zur 2., die 5. bis 4. und die 6. bis 5. angehängt (also 4 Zeilen mit Feldern) %Code%).
Es kann potenziell mehr als drei Abfahrten für jede ID geben, daher ist ein allgemeiner Ansatz erforderlich. Bitte beachten Sie auch, dass es in den Daten Löcher geben kann, in denen ID Arrival Date Arrival City Departure Date Departure City Arrival Date2 Arrival City2 Departure Date2 Departure City2
und Arrival City
nicht übereinstimmen - z. Das Departure City
der 5. Zeile ist nicht das Arrival City
der 6. Zeile, aber sie sollten trotzdem zusammengeführt werden. Ein wichtiges Ziel ist es, eine bessere Übersicht über die Anzahl der Löcher in den Daten zu erhalten.
Eine Lösung besteht darin, einen CTE zu verwenden und zu berücksichtigen, dass der Unterschied zwischen zwei aufeinanderfolgenden Zeilen (durch den rowno gekennzeichnet) immer 1 ist (und auch die Daten berücksichtigen):
%Vor%SQL Geige hier: SQLFiddle
Versuchen Sie Folgendes:
%Vor%Bearbeitet basierend auf Ihrem Kommentar zu:
Ich bin mir nicht sicher, nach welchem Ergebnis Sie suchen sollten. Aber ich dachte mir, ich würde Ihnen eine Chance geben und sehen, ob Ihnen irgendetwas davon hilft.
%Vor%Dies ist der Code zum Starten ..
%Vor%führt zu:
%Vor%Jeder Ort, an dem das Paar id = 0 ist ... Sie haben eine Lücke / baddata, aber Sie wollen es setzen ..
Sie könnten auch:
%Vor%Dies wird die vorherige Abfahrt Stadt und Datum hinzufügen .. und Sie können tun, was Sie wollen mit den Nullen .. sie werden den ersten Flug bedeuten .. oder eine Lücke, wenn die nachfolgende Paar-ID = 0 ...
Die Auswahloptionen werden endlos .... Wenn null und lag (pairid) = 0, dann hast du die Zeile mit der Lücke. Wenn null und Paar id = id .. und lag (pairid) = id dann hast du Dein erster Flug ..
Ich meine, ich kann weitermachen ... und dir mehr Details geben, aber ich bin mir nicht sicher, ob du danach suchst .. Hoffe, es hat trotzdem geholfen ...
Viel Glück!
P.S Ich habe nicht gesehen, warum Sie den Tisch mit sich selbst verbinden mußten. Vielleicht habe ich den ganzen Punkt verpasst ... ich ... sorry, wenn das der Fall ist ...
Es klingt für mich so, als wollten Sie die Ergebnisse drehen und die Ergebnisse in zusätzliche Spalten einfügen. Ich habe ROW_NUMBER () für die Bestellung verwendet. Ich verkettete die Spalten in einer Reihe vor dem Drehpunkt, schwenkte und verwendete dann eine Funktion, um die Verkettung umzukehren.
%Vor%mit dieser SplitString-Funktion
%Vor%Tags und Links sql sql-server tsql join self-join