2013-04-03 30 views
11

Cố gắng sử dụng các câu lệnh CASE khi tham gia vào bên trong và tất cả những gì tôi nhận được là lỗi cú pháp, có ai có lời khuyên nào về điều này không?Tuyên bố về trường hợp trên INNER Tham gia

Đây là mã

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 

Đây là lần đầu tiên tôi đã thậm chí làm việc với trường hợp báo cáo chứ chưa nói kết hợp chúng với một bên tham gia vì vậy tôi xin lỗi nếu tôi đã hoàn toàn sai lầm.

Các lỗi cú pháp im nhận được là:

không đúng cú pháp trên = và KHI đây

THEN Call_Type_ID = 10 
WHEN 

Và cú pháp không chính xác mong CHUYỂN trên GROUP BY

Trả lời

19

Nó có vẻ như bạn đang cố gắng tạo điều khoản trong trường hợp, nhưng thay vào đó bạn nên so sánh kết quả của trường hợp với Call_Type_ID (hoặc bất kỳ trường nào khác mà bạn muốn) như trong ví dụ tôi đã viết bên dưới Hy vọng điều đó sẽ hữu ích!

Ngoài ra đôi khi tôi sử dụng dấu ngoặc ôm trên vỏ của mình để giúp dễ dàng thấy nơi bắt đầu và dừng lại.

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

Tôi nghĩ rằng bạn cũng có thể đúng, như tôi đã nói im mới cho toàn bộ khái niệm. Cảm ơn vì lời khuyên –

-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 

từ emp inner join dept emp.deptno=dept.deptno ;

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

Tôi đang xem xét tại đây ta ble như oracle theo bảng mặc định.

Các vấn đề liên quan