2017-05-28 29 views
2

私は、件名に基づいて顧客から送信された電子メールをカウントするクエリを実行しています。クエリは結果を返しません。

DECLARE @LastMonthNo varchar(2) 
    DECLARE @LastMYear varchar(4) 

    SET @LastMonthNo = DATEPART(m,DATEADD(m,-1,GetDate())) 
    SET @LastMYear = DATEPART(yyyy,DATEADD(m,-1,GetDate())); 

    SELECT 
     CustID, CustName, CustEmail, 
     ISNULL(SUM(CASE WHEN EmailSubject LIKE 'KeyWord' THEN 1 END),0) AS TotalEmail 
    FROM 
     TableEmails 
    WHERE 
     DATEPART(M, DATESENT) = @LastMonthNo 
     AND DATEPART(YYYY, DATESENT) = @LastYearNo 
GROUP BY CustID, CustName, CustEmail 

一部のお客様には、クエリは結果を返しません。私はNULLを意味するわけではない、私はレコードが全くないことを意味する。しかし、私はそれらの顧客を特定する必要があります。

何らかの結果を生成するためにクエリを実行するにはどうすればよいですか? 0は完璧です。

+1

残りのクエリを表示し、それに基づいてテーブル構造、サンプルデータ、および期待される出力を示します。 – Utsav

+0

キーワードは件名に含まれている行をコメントにして除外すると、クエリは結果を返します。 電子メールテーブルをスキャンするためにdifferenクエリを実行すると、結果はありません。つまり、顧客が電子メールを一度も送信していない場合、私は空白の結果になります。 – DeepDiver

答えて

3

はこのような何かを試してみてください。..

SELECT CustID, CustName, CustEmail, 
     SUM(CASE WHEN EmailSubject LIKE 'KeyWord' 
         AND DATEPART(YYYY,DATESENT)[email protected] 
         AND DATEPART(YYYY,DATESENT)[email protected] 
       THEN 1 ELSE 0 END) AS TotalEmail, 
    FROM TableEmails 
    GROUP BY CustID, CustName, CustEmail 

違いは何ですか?

WHEREはGROUP BYの前に実行されます。したがって、クエリでは、他の顧客が除外された後に結果をグループ化します。その条件をCASE文に移動すると、日付に関係なく表の各レコードの条件をチェックします。希望は意味をなさない。

+0

ありがとうございます。 ISNULLを削除しても、結果は得られません。 – DeepDiver

+0

@DeepDiver ISNULLを削除するだけではありません。上記の答えでGROUP BYに注目してください。 – DarkKnight

+0

@DarkNight、気づいた、ありがとう。また、クエリにも表示されます。 この問題は、前月に特定の顧客から送信された電子メールがないために発生します。私が送信期間を見ている行と同じクエリを実行すると、2013年に顧客からメールが送られてきたので結果があります。 空白の結果で状況を回避する必要があります。 – DeepDiver

関連する問題