2016-04-18 1 views
0

Je rencontre un problème lors de la sélection de la liste des valeurs de comptage à utiliser avec SQL CE.La clause Where ne sélectionne pas de compte dans SQL Server CE

SELECT Time AS Hour,Cast (COUNT(ReceivedTime)*1.0/(10)as decimal(16,2)) AS HourlyTotal 
    FROM tblTime 
    LEFT OUTER JOIN tblMessageReceived ON Time = ReceivedTime 
    WHERE ReceivedDateTime >= '2016-01-01' AND ReceivedDateTime <= '2016-07-07' 
    GROUP BY Time 

Mais sélectionnez le nombre non nul seulement. Comme le tableau de résultat ci-dessous.

Result Table

ici, je veux sélectionner tous les temps horaire avec les valeurs de comptage 0.

+0

Mettez les conditions dans la clause 'ON'. –

+0

@FelixPamittan dans là j'ai utilisé ON Clause (ON Time = ReceivedTime), mais ça ne fonctionne pas –

Répondre

1

Votre clause WHERE transforme efficacement votre LEFT JOIN en INNER JOIN. La solution est de les mettre dans la clause ON:

SELECT 
    t.Time AS Hour, 
    CAST(COUNT(t.ReceivedTime)*1.0/(10) AS DECIMAL(16, 2)) AS HourlyTotal 
FROM tblTime t 
LEFT OUTER JOIN tblMessageReceived tmr 
    ON t.Time = tmr.ReceivedTime 
    AND tmr.ReceivedDateTime >= '2016-01-01' 
    AND tmr.ReceivedDateTime <= '2016-07-07' 
GROUP BY t.Time 

Note:

  • Utilisez un alias significatif pour améliorer la lisibilité.
+0

Merci @ Félix Pamittan, Maintenant, ça fonctionne très bien. trouvé l'erreur "clause WHERE transforme votre jointure gauche en une jointure interne". Pouvez-vous s'il vous plaît expliquer comment cela affecte la clause where. –

+0

Dans votre requête d'origine, après l'exécution du 'JOIN ', les lignes non appariées auront une valeur' NULL' pour 'ReceivedDateTime'. Ces lignes seront ensuite éliminées par la clause 'WHERE'. –

+0

Merci @ Félix, j'ai compris. –