2016-04-18 5 views
0

У меня возникла проблема в выборе списка всех значений счетчика для таблицы с использованием SQL CE.Где предложение не выбирает o считать в 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 

Но он выбирает только нулевой счетчик. В таблице результатов ниже.

Result Table

В здесь я хочу, чтобы выбрать все время Hour со значениями 0 кол.

+0

Положите условия в предложение 'ON'. –

+0

@FelixPamittan там я использовал ON Clause (ON Time = ReceivedTime), но он не работает –

ответ

1

Ваша статья WHERE эффективно превращает ваш LEFT JOIN в INNER JOIN. Решение состоит в том, чтобы поместить их в предложении 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 

Примечание:

  • Используйте осмысленный псевдоним для улучшения читаемости.
+0

Спасибо @Felix Pamittan, теперь он отлично работает. обнаружил ошибку. «Предложение WHERE эффективно превращает вашу ЛЕВУЮ ВСТУПЛЕНИЕ в ИНТЕРНЕТНУЮ СОЕДИНЕНИЕ». Не могли бы вы объяснить, как это влияет на предложение. –

+0

В исходном запросе после выполнения 'JOIN' строки, не совпадающие, будут иметь значение« NULL »для' ReceivedDateTime'. Эти строки затем будут исключены из предложения WHERE. –

+0

Спасибо @ Феликс, я понял. –