Заявление по делу INNER Join

Попытка использовать инструкции 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

Это первый раз, когда я даже работал с аргументами case, не говоря уже о их объединении с внутренним соединением, поэтому мне жаль, если я полностью перепутал.

Синтаксические ошибки im get:

Неправильный синтаксис на = и КОГДА здесь

THEN Call_Type_ID = 10
WHEN

И неправильный синтаксис, ожидающий CONVERSION в GROUP BY

Ответ 1

Похоже, вы пытаетесь создать Where-clauses в этом случае, но вместо этого вы должны сравнить результат дела с 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.

Ответ 2

select * from emp;
select * from dept;

...........................................................................

select Ename,Job,dname,
Case job
when 'Clerk' then 'C'
when 'Salesman' then 'S'
when 'Manager' then 'M'
when 'Analyst' then 'A'
else 'Other'
end  as Demo

из emp внутреннего деления соединения на emp.deptno=dept.deptno ;

................................................................................

Я рассматриваю таблицу здесь как оракулу по умолчанию.