【问题标题】:need to translate specific t-sql case in pl/sql需要在 pl/sql 中翻译特定的 t-sql case
【发布时间】:2011-04-01 17:59:09
【问题描述】:

谁能告诉我如何翻译下面的 T-SQL 语句:

SELECT fileld1 = CASE 
                   WHEN T.option1 THEN -1 
                   ELSE
                     CASE WHEN T.option2 THEN 0
                     ELSE 1
                   END
                 END
  FROM Table1 AS T

关键是我需要为 select 语句中的单个字段验证表中的两个不同选项。

我尝试在 pl/sql 中使用 IF 语句做一些事情,但它对我不起作用:

SELECT IF T.option1 THEN -1 
       ELSE IF T.option2 THEN 0  
       ELSE 1 
       END 
  FROM Table1 AS T

我实际上不确定如何在 SELECT 语句中编写 IF 语句..
而且,我需要在 select 语句中执行它,因为我正在构建一个视图。

【问题讨论】:

    标签: tsql plsql if-statement case translate


    【解决方案1】:

    用途:

    SELECT CASE 
             WHEN T.option1 = ? THEN -1 
             WHEN T.option2 = ? THEN 0
             ELSE 1
           END AS field1
      FROM Table1 AS T
    

    我无法让您原来的 TSQL 工作 - 我明白了:

    消息 4145,第 15 级,状态 1,第 4 行 在预期条件的上下文中指定的非布尔类型表达式,靠近“THEN”。

    ...因为没有价值评估。如果要检查列是否为空,则需要使用:

    SELECT CASE 
             WHEN T.option1 IS NULL THEN -1 
             WHEN T.option2 IS NULL THEN 0
             ELSE 1
           END AS field1
      FROM Table1 AS T
    

    ...或者如果您需要它们不为空时:

    SELECT CASE 
             WHEN T.option1 IS NOT NULL THEN -1 
             WHEN T.option2 IS NOT NULL THEN 0
             ELSE 1
           END AS field1
      FROM Table1 AS T
    

    CASE 表达式短路 - 如果第一个 WHEN 匹配,它返回值并退出对该行的处理 - 因此不考虑之后的选项。

    【讨论】:

      【解决方案2】:

      如果我没记错的话,PL/SQL 也支持case。您只需将列别名从表达式前的“field1=”移动到表达式后的“AS filed1”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        • 2021-01-15
        相关资源
        最近更新 更多