具有一个条件和多个结果的 SQL CASE

Posted

技术标签:

【中文标题】具有一个条件和多个结果的 SQL CASE【英文标题】:SQL CASE with one condition and multiple results 【发布时间】: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'

【问题讨论】:

【参考方案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

【讨论】:

以上是关于具有一个条件和多个结果的 SQL CASE的主要内容,如果未能解决你的问题,请参考以下文章

提取具有多个条件的字符串 - sql

SQL利用Case When Then多条件

条件判断函数-CASE WHEN、IF、IFNULL详解

case when用法sql

SQL:CASE WHEN ELSE END用法

SQL - 使用具有多个 IS NULL、IS NOT NULL 的 CASE 语句