Kombinieren von zwei Abfragen, um die Anzahl der Monate zu bilden

9

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?

    
Philip 29.11.2016, 11:33
quelle

10 Antworten

0

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%     
Ross Bush 01.12.2016, 14:13
quelle
3

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%     
GHWP 29.11.2016 11:42
quelle
1

Diese Methode verwendet CROSS APPLY mit VALUES, um Ihre Master-Monatsliste zu erstellen.

Ich empfehle GETDATE () durch eine Variable zu ersetzen, wenn Sie können.

%Vor%     
pacreely 03.12.2016 15:25
quelle
0

Ein paar Unterabfragen mit einem LEFT JOIN und einem ISNULL sollten es tun:

%Vor%     
Steve Chambers 01.12.2016 13:53
quelle
0

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%     
John Cappelletti 01.12.2016 23:49
quelle
0
%Vor%     
Ivan Starostin 03.12.2016 18:16
quelle
0

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.

    
Matt 06.12.2016 20:52
quelle
0

Sie können die Abfrage wie folgt formatieren

%Vor%     
Maha Khairy 07.12.2016 09:10
quelle
-1
%Vor%     
Dexter 05.12.2016 23:40
quelle
-1

Nachdem angenommen wird, dass die "Test" -Tabelle eine Tabelle ist, die den ersten jedes Monats für mindestens das vergangene Jahr auflistet und auch zukünftige Daten enthalten kann, hier mein Vorschlag:

%Vor%     
tlemaster 06.12.2016 03:12
quelle

Tags und Links