2008-10-01 11 views
0

Je souhaite retourner toutes les dates de demande pour le mois en cours et pour l'année en cours. Cela doit être simple, mais je ne peux pas le comprendre. Je sais que j'ai 2 dates pour le mois en cours et 90 dates pour l'année en cours. Droite, Gauche, Extérieur, Intérieur Je les ai tous essayés, jetant simplement du code sur le mur en essayant de voir ce qui va coller et rien ne fonctionne. Je reçois soit 2 pour les deux colonnes ou 180 pour les deux colonnes. Voici ma dernière déclaration sélectionnée.Confusion sur le nombre (*) et les jointures autonomes

SELECT count(a.evdtApplication) AS monthApplicationEntered, 
     count (b.evdtApplication) AS yearApplicationEntered 
FROM tblEventDates a 
RIGHT OUTER JOIN tblEventDates b ON a.LOANid = b.loanid 
WHERE datediff(mm,a.evdtApplication,getdate()) = 0 
     AND datediff(yy,a.evdtApplication, getdate()) = 0 
     AND datediff(yy,b.evdtApplication,getdate()) = 0 

Répondre

6

Vous n'avez besoin d'aucune jointure.

Vous souhaitez compter la colonne loanID de tblEventDates, et vous souhaitez le faire conditionnellement en fonction de la date correspondant au mois en cours ou à l'année en cours.

SO:

SELECT SUM(CASE WHEN Month(a.evdtApplication) = MONTH(GEtDate() THEN 1 END) as monthTotal, 
     count(*) 
FROM tblEventDates a 
WHERE a.evdtApplication BETWEEN '2008-01-01' AND '2008-12-31' 

Qu'est-ce que cela fait est de sélectionner toutes les dates de l'événement cette année, et additionnez celles qui correspondent à vos conditions. S'il ne correspond pas au mois en cours, il n'ajoutera pas 1. En fait, vous n'avez même pas besoin de faire une condition pour l'année parce que vous ne faites que tout interroger pour cette année.

+1

J'espère qu'il n'y aura pas de demandes à midi le 2008-12-31. –

+0

Oups. Eh bien, c'est ce que vous obtenez pour un exemple rapide écrit sans test. C'est pourquoi nous testons! – CodeRedick

+0

Telos merci pour la réponse rapide et Dave pour souligner un excellent test. –