0

Good Day To All 我是 SQL 的新手,想在 SQL 中执行以下操作。我已经在 Crystal 中完成了,但不知道是否可以在 SQl 中完成。这是我在 Crystal 中的操作方式,这可以在 SQL 中完成吗:

{@Adjust Code}并且{@Adjust Code WH}是 2 个变量,如果 null 将工作“空白”放在字段中,则检查 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}

问候,大卫

4

2 回答 2

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 不需要的花括号。

于 2013-11-04T17:25:43.290 回答
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
于 2013-11-04T17:23:26.133 回答