2013-04-03 11 views
11

Próbujesz użyć instrukcji CASE na wewnętrznym sprzężeniu i wszystko, co dostaję, to błędy składniowe, czy ktoś ma jakieś rady na ten temat?Sprawa na INNER Dołącz

Oto kod

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 

Jest to pierwszy raz, kiedy jeszcze pracował ze sprawozdania przypadków nie mówiąc łącząc je z sprzężenia wewnętrznego tak mi przykro, jakbym całkowicie zawiedli.

Błędy składniowe im coraz to:

Nieprawidłowa składnia o = i KIEDY tutaj

THEN Call_Type_ID = 10 
WHEN 

i nieprawidłową składnię spodziewa wymiany w GROUP BY

Odpowiedz

19

Wydaje się, że próbujesz twórz klauzule Where w tej sprawie, ale powinieneś porównać wynik sprawy z Call_Type_ID (lub dowolne inne pole), tak jak w przykładzie, który napisałem poniżej Mam nadzieję, że pomoże!

Czasami używam również klamry nad moją obudową, aby łatwiej było zobaczyć, gdzie zaczynają się i kończą.

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. 
+0

Myślę, że możesz mieć rację, tak jak powiedziałem, że jestem nowy w całej koncepcji. dzięki za radę –

-3
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 

z EMP sprzężenia wewnętrznego dEPT emp.deptno=dept.deptno ;

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

Rozważam tutaj ta ble jak oracle domyślnie tabela.