Frage : Wie ich Monate mit nullreihen in Verkäufe durch Monthreport einschließen kann

Hallo haben Kerle,

I TSQL, zum mir der Daten für einen Report/ein Diagramm zu erhalten, die Verkäufe bis zum Monat zeigen.  Jedoch während es die korrekten Werte zurückbringt, wenn es keine Reihen für einen bestimmten Monat gibt, zurückgebracht nichts bracht.  In solch einer Situation muss ich eine zusätzliche Reihe mit einem nullwert für jeden fehlenden Monat zurückbringen.

How kann i-Bestes dieses erzielen gefallen?  

Chris Bray
1:
2:
3:
4:
5:
6:
7:
8:
9:
SELECT JAHR (TransactionDate) ALS TransactionYear,
MONAT (TransactionDate) ALS TransactionMonth,
SUMME (verschmelzen (BaseDebitAmount, 0) - verschmelzen (BaseCreditAmount, 0)) ALS GrossMonthlySales
VON GeneralJournal
WO MasterRecord 
UND (TransactionTypeId = 12 ODER TransactionTypeId = 13 ODER TransactionTypeId = 14) 
UND TransactionDate ZWISCHEN „01/11/2009 00:00: 00“ UND „31/10/2010 23:59: 59“
GRUPPE BIS ZUM YEAR (TransactionDate), MONTH (TransactionDate)
AUFTRAG DURCH TransactionYear, TransactionMonth;

Antwort : Wie ich Monate mit nullreihen in Verkäufe durch Monthreport einschließen kann

>> wieder, nicht völlig praktisch.  Wir beenden oben mit einer sehr großen Tabelle mit täglichem von MinDate zu eingeschlossenem MaxDate.  Es muss eine bessere Weise geben? <>
Ich zustimme e.

Stattdessen eine Tabelle der aufeinander folgenden Zahlen herstellen -- eine „Tally“ Tabelle, wenn Sie nicht bereits ein haben.
Dann können Sie etwas wie unten tun.

BETR.: Mechaniker der Tallytabelle::
Gerade aufeinander folgende Zahlen von 0 zu, was auch immer, 100.000 sagen.  Einen einzigartigen, gesammelten Index auf der Zahl, mit einem fillfactor von 100 spezifizieren (diese Tabelle ist nie modernisiert, oder eingesetzt zwischen vorhandenen Reihen, so gibt es keine Notwendigkeit an freespace in der Tabelle).  Für Höchstleistung sie auf Read-only einstellen (if/when Sie Reihen, natürlich einstellen Sie es auf vorübergehend updateable wieder) addieren müssen.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
@startDate Datum/Uhrzeit ERKLÄREN
@endDate Datum/Uhrzeit ERKLÄREN

JAHR (DATEADD (MONAT, sn.num, TransactionDate) VORWÄHLEN) ALS TransactionYear,
MONAT (DATEADD (MONAT, sn.num, TransactionDate)) ALS TransactionMonth,
SUMME (verschmelzen (BaseDebitAmount, 0) - verschmelzen (BaseCreditAmount, 0)) ALS GrossMonthlySales

Vom sequentialNumbersTable Sn 
LINKE ÄUSSERE VERBINDEN GeneralJournal AUF TransactionDate ZWISCHEN DATEADD (MONAT, sn.num, @startDate) UND DATEADD (Mitgliedstaat, -3, DATEADD (MONAT, sn.num + 1, @startDate))

WO sn.tally ZWISCHEN 0 UND DATEDIFF (MONAT, @startDate, @endDate)
UND… andere Bedingungen als vorher…
Weitere Lösungen  
 
programming4us programming4us