如何基于CASE执行不同的SELECT语句

时间:2010-07-02 06:31:25

标签: sql sybase case

我在使用CASE语句执行查询时遇到问题。 根据我的条件,(例如长度),我想执行不同的SQL语句。

有问题的示例查询如下:

select case 
    when char_length('19480821') = 8
        then select count(1) from Patient
    when char_length('19480821')=10
        then select count(1) from Doctor 
end

例外:

  

[错误]脚本行:1-5 --------------------------
  关键字“select”附近的语法不正确。
  消息:156,等级:15,状态:2
  服务器:sunsrv4z7,行:2

我无法更正语法。我从char_length获取字符串作为用户的输入。 如何根据特定条件触发查询? CASE是正确的选择吗?或者我必须使用任何其他东西。

4 个答案:

答案 0 :(得分:4)

只需在select语句周围打开和关闭括号就可以解决问题

select 
    case when 
        char_length('19480821')=8 then 
            (select count(1) from Patient )
        when 
        char_length('19480821')=10 then 
            (select count(1) from Doctor )
      end

答案 1 :(得分:2)

select 
  case when char_length('19480821')=8 then (select count(1) from Patient)
        when char_length('19480821')=10 then (select count(1) from Doctor)
    end

问题是您在嵌套的“选择”语句中缺少开始和结束括号:)

答案 2 :(得分:2)

请注意,它不是一个案例STATEMENT,它是一个案例EXPRESSION。通过将查询括在括号中,您将它们(语法上)转换为值。

这在原理上类似于子查询,例如 “从医生那里选择工资名称=(从医生那里选择最高(工资))”

答案 3 :(得分:-1)

选择     情况下         LEN('1948082100')= 8然后             (选择“ HELLO”)         什么时候         LEN('194808210')= 10然后             (选择“ GOODBYE”)     结束

更改值以测试结果。

相关问题