具有一个条件和多个结果的 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的主要内容,如果未能解决你的问题,请参考以下文章