case语句是否可以使用else else和or子句

时间:2013-11-04 17:18:55

标签: sql

美好的一天我是SQL的新手,并希望在SQL中执行以下操作。我在Crystal中做过,但不知道是否可以在SQl中完成。这是我在Crystal中完成它的方法,可以在SQL中完成:

{@Adjust Code}{@Adjust Code WH}是检查空值的2个变量,如果null将工作“空白”放在字段中

以下代码可以放在select语句中:

if {RV_CLAIM_DETAILS.NET} <> 0
    then {RV_CLAIM_DETAILS.NET}

    else if ({@Adjust Code} in ["#C", "A2", "24"] or
            {@Adjust Code} = "23" and {@Adjust Code WH} = "24")
             then {RV_CLAIM_DETAILS.CONTRVAL}

此致 大卫

2 个答案:

答案 0 :(得分:2)

表示此逻辑的标准SQL方法是使用case语句:

(case when RV_CLAIM_DETAILS.NET <> 0
      then RV_CLAIM_DETAILS.NET
      when "@Adjust Code" in ('#C', 'A2', '24') or
           "@Adjust Code" = '23' and "@Adjust Code WH" = '24'
      then RV_CLAIM_DETAILS.CONTRVAL
 end) as myValue

这与语句具有完全相同的语义。如果第一个子句匹配,则返回该值。如果不匹配,则返回NULL

一些笔记。首先,SQL使用单引号而不是双引号来分隔字符串。也就是说,一些数据库引擎支持双引号。

其次,通常不允许以'@'开头的列名,除非它们被转义。逃避名称的一种方法是使用双引号。也就是说,一些数据库引擎使用方括号或后引号用于相同的目的。我还删除了大括号,这是SQL不需要的。

答案 1 :(得分:1)

简单CASE表达式:

CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END 
Searched CASE expression:
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END

示例:

SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO