Ich habe derzeit die folgende Abfrage:
%Vor%gibt die folgenden Ergebnisse zurück:
%Vor%Ich habe auch die folgende Frage:
%Vor%gibt die folgenden Ergebnisse zurück:
%Vor%Was ich tun muss, ist, die beiden Abfragen zu einer Abfrage zusammenzufassen und 0 für die Monate anzuzeigen, die in der ursprünglichen Abfrage fehlen.
Könnte jemand bitte helfen?
Wenn Sie viele Lücken und Inselrechnungen und / oder datumsbasierte Abfragen ohne Lücken machen, kann ich nicht betonen, wie viel einfacher eine Kalendertabelle Ihr Leben machen wird.
Im Grunde brauchen Sie nur eine Tabelle ähnlich wie:
Kalender
%Vor%Wählen Sie einen Datumsbereich aus. Ich habe dieses Jahrhundert und das letzte Jahrhundert gewählt, weil es meinen Geschäftsmodellen entspricht. Führen Sie als nächstes einfach eine Schleifenfunktion aus und füllen Sie Ihre Tabelle auf, wenden Sie schließlich die richtigen Indizes an und verwenden Sie sie nach Bedarf.
%Vor%Traditionell wird dies mit einer Kalender-Tabelle gelöst (zB diese msdn-antwort ), aber in Ihrem Fall sollte eine abgeleitete Tabelle und Outer Join funktionieren:
%Vor% Ein paar Unterabfragen mit einem LEFT JOIN
und einem ISNULL
sollten es tun:
Ich verwende häufig einen TVF, um dynamische Datums- / Zeitbereiche zu erstellen. Dieses udf ist schneller als der rekursive Cte-Ansatz (besonders bei größeren Mengen). Außerdem können Sie Datumsbereich, Datumsteil und Inkrement definieren. Ich sollte beachten, eine Tally-Tabelle würde auch den Trick tun.
%Vor%Gibt
zurück %Vor%Die UDF wenn nötig
%Vor%Also gibt es eine Menge Antworten und gute Antworten darüber, wie man eine MONTH-Tabelle erstellt, dann gehen Sie zu Ihren Besuchen, um zu Ihrer Antwort zu gelangen. Aber ich wollte Ihnen nur zeigen, wie die bedingte Aggregation Ihnen helfen könnte, wenn es immer mindestens ein Datum aus jedem Monat in der Besuchstabelle gibt. Beachten Sie, ich meine nicht 1 Datensatz für den Client, den Sie filtern, sondern für alle / alle Clients. Mit anderen Worten, wird es in jedem Monat mindestens einen Kunden geben? Wenn dies der Fall ist, können Sie bedingte Aggregation durchführen, um wie folgt zu antworten:
%Vor%Wenn nicht, dann brauchen Sie eine Datumstabelle @pacreely zeigt Ihnen eine schöne Methode, dies zu tun.
Tags und Links sql-server tsql