【问题标题】:SQL CASE with one condition and multiple results具有一个条件和多个结果的 SQL CASE
【发布时间】:2019-12-11 20:00:36
【问题描述】:

我正在编写一个存储过程,它将字符串作为输入参数之一,然后检索结果。

我熟悉下面的 SQL CASE 格式。

CASE
  WHEN col1 in ('val1', 'val2', 'val3')
  THEN 'HELLO'    
  WHEN col1 in ('val4', 'val5', 'val6') 
  THEN 'WORLD'    
END AS col2

其他方式的查询应该是什么?

就像我将col2 值作为'HELLO' 一样,它应该返回所有带有col1 的行,其中包含'val1', 'val2', 'val3'

【问题讨论】:

    标签: sql oracle case


    【解决方案1】:

    只需将其包装在另一个查询中...

    SELECT *
    FROM (
          SELECT CASE
                 WHEN col1 in ('val1', 'val2', 'val3')
                 THEN 'HELLO'    
                 WHEN col1 in ('val4', 'val5', 'val6') 
                 THEN 'WORLD'    
                 END AS col2
    ...
         )t
    WHERE t.col2 = 'HELLO'
    

    【讨论】:

      【解决方案2】:
      WHERE 1 = CASE
        WHEN (col2 = 'HELLO' and col1 in ('val1', 'val2', 'val3'))
          OR (col2 = 'WORLD' and col1 in ('val4', 'val5', 'val6'))
        THEN 1
        ELSE 0
        END
      

      或者,更简单..

      WHERE  (col2 = 'HELLO' and col1 in ('val1', 'val2', 'val3'))
          OR (col2 = 'WORLD' and col1 in ('val4', 'val5', 'val6'))
      

      【讨论】:

        【解决方案3】:

        where (col2 = 'HELLO' and col1 in ('val1', 'val2', 'val3')) 或 (col2 = 'WORLD' and col1 in ('val4', 'val5', 'val6'))

        【讨论】:

          【解决方案4】:

          你可以试试这个。

          SELECT
             col1,
             CASE
             WHEN col1 in ('val1', 'val2', 'val3')
             THEN 'HELLO'    
             WHEN col1 in ('val4', 'val5', 'val6') 
             THEN 'WORLD'    
             END AS col2
          FROM
             --wherever you are getting your data from...
          WHERE
             col2 = :SEARCH
          

          当您将 HELLO 传递给绑定变量时,它将返回如下所示的结果。

          col1 col2
          ---- ----
          val1 HELLO
          val2 HELLO
          val3 HELLO
          

          如果你只想返回 col1,你可以这样做

          WITH SEARCH_RESULTS AS
          (
             SELECT
                col1,
                CASE
                WHEN col1 in ('val1', 'val2', 'val3')
                THEN 'HELLO'    
                WHEN col1 in ('val4', 'val5', 'val6') 
                THEN 'WORLD'    
                END AS col2
             FROM
                --wherever you are getting your data from...
             WHERE
                col2 = :SEARCH
          )
          
          SELECT col1 FROM SEARCH_RESULTS
          

          【讨论】:

            猜你喜欢
            • 2023-04-10
            • 1970-01-01
            • 2020-06-16
            • 2019-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-14
            • 1970-01-01
            相关资源
            最近更新 更多