web-dev-qa-db-ja.com

内部結合に関するケースステートメント

内部結合でCASEステートメントを使用しようとして、構文エラーだけが表示されますが、これに関するアドバイスはありますか?

ここにコードがあります

 SELECT  
    Call_type_ID,
    SUM (staging.dbo.outgoing_measure.ring_time) AS Ring_Time,
    SUM (staging.dbo.outgoing_measure.hold_time) As Hold_Time,
    SUM (staging.dbo.outgoing_measure.talk_time) AS Talk_Time,
    SUM (staging.dbo.outgoing_measure.acw_time) AS ACW_Time,
    COUNT(*) CallCount
FROM outgoing_measure

INNER JOIN datamartend.dbo.Call_Type_Dim ON 
CASE 
WHEN 
CTICallType_ID = 1
AND CTIAgentCallType_ID = 0
AND Abandoned  IS NULL
AND AnsTime > 0
AND CallState IS NULL
THEN Call_Type_ID = 10
WHEN
CTICallType_ID = 1
AND CTIAgentCallType_ID = 0
AND Abandoned  IS NULL
AND AnsTime > 0  
AND CallState = 1
THEN call_Type_id = 11
WHEN 
CTICallType_ID = 1
AND CTIAgentCallType_ID = 0
AND Abandoned = 1
AND AnsTime IS NULL
AND CallState IS NULL
THEN call_type_ID = 12
ELSE call_type_id = 1
END

Group by call_Type_id

ケースステートメントを内部結合と組み合わせることはもちろんのこと、私がケースステートメントを使用したのはこれが初めてです。

構文エラーは次のとおりです。

ここの=およびWHENの構文が正しくありません

THEN Call_Type_ID = 10
WHEN

そして、GROUP BYでCONVERSIONを期待する不正な構文

13
Richard C

あなたはケースでWhere節を作成しようとしているようですが、代わりに私が書いた例のようにケースの結果をCall_Type_ID(またはあなたが望む他のフィールド)と比較する必要があります!

また、場合によっては、開始位置と停止位置を簡単に確認できるように、ケーシングにブラケットを使用します。

INNER JOIN datamartend.dbo.Call_Type_Dim ON 
(CASE 
 WHEN  CTICallType_ID = 1
     AND CTIAgentCallType_ID = 0
     AND Abandoned  IS NULL
     AND AnsTime > 0
     AND CallState IS NULL
     THEN 10
WHEN CTICallType_ID = 1
     AND CTIAgentCallType_ID = 0
     AND Abandoned  IS NULL
     AND AnsTime > 0  
     AND CallState = 1
     THEN 11
WHEN 
     CTICallType_ID = 1
     AND CTIAgentCallType_ID = 0
     AND Abandoned = 1
     AND AnsTime IS NULL
     AND CallState IS NULL
     THEN 12
ELSE 1
END) = Call_Type_ID  -- Insert something here to join on.
26
Werner Waage