Der Titel erfasst nicht ganz, was ich meine, und dies kann ein Duplikat sein.
Hier ist die lange Version: Wie erstelle ich für jeden Gast, den sie als Gast aufgenommen haben, den Namen eines Gastes, sein Registrierungsdatum und das Datum seiner Abreise?
Beispiel: Bob checkt 7/14 ein und verlässt 7/17. Ich möchte
%Vor%als mein Ergebnis.
Danke!
Ich würde argumentieren, dass die folgende Abfrage für diesen speziellen Zweck ungefähr so effizient ist wie die Verwendung einer speziellen Nachschlagetabelle.
%Vor%Ergebnisse:
%Vor%Vermutlich wirst du das als Set brauchen, nicht für ein einzelnes Mitglied, also hier ist eine Möglichkeit, diese Technik anzupassen:
%Vor%Ergebnisse:
%Vor%Wie @Dems darauf hingewiesen hat, könnte dies folgendermaßen vereinfacht werden:
%Vor%Normalerweise mache ich das mit einem Trick mit row_number () in einer Tabelle. Also:
%Vor%Die Berechnung für Seq geht ziemlich schnell, da keine Berechnung oder Reihenfolge erforderlich ist. Sie müssen jedoch sicher sein, dass die Tabelle für alle Zeiträume groß genug ist.
Wenn Sie eine "Tally" - oder "Numbers" -Tabelle haben, wird das Leben für solche Dinge wirklich einfach.
%Vor%So erstellen Sie eine "Tally" -Tabelle.
%Vor%Weitere Informationen darüber, was eine "Tally" -Tabelle in SQL ist und wie sie verwendet werden kann, um While-Schleifen und den "Hidden RBAR" reursiver CTEs, die zählen, zu ersetzen, finden Sie im folgenden Artikel.
Tags und Links sql sql-server tsql