SQL INNER加入案例说明

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15786611/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 14:37:41  来源:igfitidea点击:

Case Statement on INNER Join

sqlsql-serversyntaxcase

提问by Richard C

Trying to use CASE statements on a inner join and all I'm getting is syntax errors, anyone got any advice on this?

尝试在内部联接上使用 CASE 语句,而我得到的只是语法错误,有人对此有什么建议吗?

Here is the code

这是代码

 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

This is the first time i've even worked with case statements let alone combining them with a inner join so i'm sorry if i've totally messed up.

这是我第一次使用 case 语句,更不用说将它们与内部连接相结合,所以如果我完全搞砸了,我很抱歉。

The syntax errors im getting are:

我得到的语法错误是:

Incorrect syntax on the = and WHEN here

此处 = 和 WHEN 的语法不正确

THEN Call_Type_ID = 10
WHEN

And incorrect syntax expecting CONVERSION on the GROUP BY

并且在 GROUP BY 上期望 CONVERSION 的语法不正确

回答by Werner Waage

It seems like you are trying to create Where-clauses in the case, but you should instead compare the result of the case against Call_Type_ID(or any other field you want) as in the example i wrote below Hope it helps!

似乎您正在尝试在案例中创建 Where 子句,但您应该将案例的结果与 Call_Type_ID(或您想要的任何其他字段)进行比较,就像我在下面写的示例中那样希望它有所帮助!

Also sometimes i use brackets over my casing to make it easier to see where they start and stop.

此外,有时我会在外壳上使用括号,以便更容易查看它们的开始和停止位置。

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.

回答by Yogesh Patil

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

from emp inner join dept on emp.deptno=dept.deptno ;

从 emp 内连接部 emp.deptno=dept.deptno ;

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

………………………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………………………………………

I am considering here table as oracle by default table.

我将这里的表视为默认表。