web-dev-qa-db-fra.com

Déclaration de cas sur INNER Join

Vous essayez d'utiliser des instructions CASE sur une jointure interne et tout ce que je reçois, ce sont des erreurs de syntaxe, quelqu'un a-t-il des conseils à ce sujet?

Voici le code

 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

C'est la première fois que je travaille même avec des déclarations de cas et encore moins en les combinant avec une jointure interne, donc je suis désolé si je me suis complètement trompé.

Les erreurs de syntaxe que j'obtiens sont:

Syntaxe incorrecte sur = et QUAND ici

THEN Call_Type_ID = 10
WHEN

Et une syntaxe incorrecte attend la CONVERSION sur le GROUP BY

13
Richard C

Il semble que vous essayiez de créer des clauses Where dans le cas, mais vous devriez plutôt comparer le résultat du cas avec Call_Type_ID (ou tout autre champ que vous voulez) comme dans l'exemple que j'ai écrit ci-dessous J'espère que cela aide!

Parfois aussi, j'utilise des crochets sur mon boîtier pour voir plus facilement où ils commencent et s'arrêtent.

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