Question : Comment peux j'inclure des mois avec les rangées zéro dans des ventes par rapport de Month

Salut les types, le

I ont TSQL pour m'obtenir les données pour un rapport/graphique montrant des ventes par mois.  Cependant, tandis qu'il renvoie les valeurs correctes s'il n'y a aucune rangée pendant un mois particulier rien n'est retourné.  Dans une telle situation je dois renvoyer une rangée additionnelle avec une valeur nulle pour chaque mois absent. le

How peut meilleur d'I réaliser ceci satisfont ?  

Chris Bray
class= > " clair " de
> de " codeSnippet " de class= de
class= " lineNumbers " de
class= de
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
ANNÉE " de " codeSnippet797449 d'id= " de
SELECT de class= (TransactionDate) COMME TransactionYear,
MOIS (TransactionDate) COMME TransactionMonth,
SOMME (fusionner (BaseDebitAmount, 0) - fusionne (BaseCreditAmount, 0)) COMME GrossMonthlySales
De GeneralJournal
LÀ OÙ MasterRecord 
ET (TransactionTypeId = 12 OU TransactionTypeId = 13 OU TransactionTypeId = 14) 
ET TransactionDate ENTRE « 01/11/2009 0h00 : 00 » ET « 31/10/2010 23h59 : 59 »
GROUPE PAR YEAR (TransactionDate), MONTH (TransactionDate)
ORDRE PAR TransactionYear, TransactionMonth ;
class= de

Réponse : Comment peux j'inclure des mois avec les rangées zéro dans des ventes par rapport de Month

>> encore, pas entièrement pratique.  Nous finirions vers le haut avec une table énorme avec journalier de MinDate à MaxDate inclus.  Il doit y a une meilleure manière ? <>
Je conviens.

Au lieu de cela, créer une table des nombres séquentiels -- une table de « contrôle », si vous n'avez pas déjà un.
Alors vous pouvez faire quelque chose comme ci-dessous.

RE : mécanismes de la table de contrôle : :
Juste nombres séquentiels de 0 à celui qui, indiquent 100.000.  Spécifier un index unique et groupé sur le nombre, avec un fillfactor de 100 (cette table ne sera jamais mise à jour ou inséré entre les rangées existantes, tellement il n'y a aucun besoin d'en espace libre dans la table).  Pour l'exécution maximum, la placer à inaltérable (if/when vous devez ajouter des rangées, naturellement vous le placeriez temporairement à updateable encore).
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
DÉCLARER la date-heure de @startDate
DÉCLARER la date-heure de @endDate

CHOISIR L'ANNÉE (DATEADD (MOIS, sn.num, TransactionDate)) COMME TransactionYear,
MOIS (DATEADD (MOIS, sn.num, TransactionDate)) COMME TransactionMonth,
SOMME (fusionner (BaseDebitAmount, 0) - fusionne (BaseCreditAmount, 0)) COMME GrossMonthlySales

Du Sn sequentialNumbersTable 
EXTERNES GAUCHES JOIGNENT GeneralJournal SUR TransactionDate ENTRE DATEADD (MOIS, sn.num, @startDate) ET DATEADD (milliseconde, -3, DATEADD (MOIS, sn.num + 1, le @startDate))

LÀ OÙ sn.tally ENTRE 0 ET DATEDIFF (MOIS, @startDate, @endDate)
ET… d'autres conditions en tant qu'avant…
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us