2013-04-03 38 views
11

İç birleşimdeki CASE deyimlerini kullanmaya çalışıyorum ve aldığım tek şey sözdizimi hatalarıdır, bu konuda herhangi bir öneriniz var mı?INNER'a İlişkin Durum Beyanı

İşte bu ben tamamen mahvettigini eğer öyleyse üzgünüm katılmak i bile tek başına bir iç ile birleştirerek izin vaka ifadelere çalıştık ilk kez 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 

olduğunu.

sözdizimi hataları alıyorum şunlardır im:

cevap

19

TARAFINDAN

Yanlış on = sözdizimi ve ZAMAN burada GROUP dönüşüm bekliyor

THEN Call_Type_ID = 10 
WHEN 

Ve yanlış sözdizimi Size çalıştığınız gibi görünüyor Durumda nerede-cümleleri oluşturmak, ancak bunun yerine dava örneğini Call_Type_ID (ya da istediğiniz herhangi bir alan) ile karşılaştırmak gerekir Aşağıda yazdığınız örnekte olduğu gibi Umut yardımcı olur!

Ayrıca, bazen nereden başlayıp durduklarını görmeyi kolaylaştırmak için kasalarımın üzerinde parantezler kullanıyorum.

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

Sanırım tamamen doğru olabilirsiniz, dediğim gibi tüm konsept için yeni. tavsiye için teşekkürler –

-3
select * from emp; 
select * from dept; 

........................................ iç emp.deptno=dept.deptno ;

üzerinde borç birleştirme emp

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 

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

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

Burada düşünmekteyim varsayılan tabloya göre oracle değerini kaldır.