2016-04-18 9 views
0

SQL CEを使用してすべてのカウント値リストをテーブルに選択する際に問題があります。Where節は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

はここで私は、0カウント値を持つすべての時間の時間を選択します。

+0

条件を「ON」句に入れます。 –

+0

@FelixPamittanそこに私はON句(ON Time = ReceivedTime)を使用しましたが、動作しません。 –

答えて

1

WHERE句はLEFT JOINを効果的にINNER JOINに変えます。

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 

注:

  • 可読性を向上させるために、意味のあるエイリアスを使用して、解決策をON句でそれらを置くことです。
+0

ありがとう@Felix Pamittan、今はうまくいきます。 "WHERE句を使用してLEFT JOINをINNER JOINに効率的に変換する"というエラーが見つかりました。あなたはそれがどのように影響を与えるかを説明してください。 –

+0

元のクエリでは、 'JOIN'が実行された後、一致しない行は' ReceivedDateTime'のための 'NULL'値を持ちます。これらの行は 'WHERE'節で取り除かれます。 –

+0

ありがとうございます@フェリックス、私はあなたのポイントを持っています。 –