【问题标题】:Case Statement on INNER JoinINNER Join 案例陈述
【发布时间】:2013-04-03 11:52:50
【问题描述】:

尝试在内部连接上使用 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 语句,更不用说将它们与内部连接结合起来了,所以如果我完全搞砸了,我很抱歉。

我得到的语法错误是:

此处的 = 和 WHEN 语法不正确

THEN Call_Type_ID = 10
WHEN

在 GROUP BY 上预期 CONVERSION 的语法不正确

【问题讨论】:

    标签: sql sql-server syntax case


    【解决方案1】:

    您似乎正在尝试在案例中创建 Where 子句,但您应该将案例的结果与 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.deptno=dept.deptno ; 的 emp 内部连接部门

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

    我正在考虑将这里的表默认为 oracle 表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 2010-10-30
      • 2016-05-13
      • 2016-02-21
      • 1970-01-01
      • 2012-09-08
      • 2013-10-14
      • 2015-05-17
      相关资源
      最近更新 更多