Заявление по делу 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 ;
................................................................................
Я рассматриваю таблицу здесь как оракулу по умолчанию.