如何解决SQL Case 中的许多布尔表达式
我有一个关于 SQL Case 块中的布尔表达式的问题。我正在使用 Oracle 数据库。 列的名称将由在每个案例块末尾声明的别名创建。
有没有办法减少这个 SQL Case 代码示例?
解决方法
您可以通过在 CTE
中计算一次 condition 并在查询中重复使用它来摆脱重复的谓词,如下所示
with cte as
(select
CASE
WHEN {complex condition No 1}
THEN 1
WHEN {complex condition No 2}
THEN 2
WHEN {complex condition No 3}
THEN 3
END condition_id,a.*
from my_example_table a
)
select
value_of_column_47,CASE
WHEN condition_id = 1
THEN 6
WHEN condition_id = 2
THEN value_of_column_18
WHEN condition_id = 3
THEN value_of_column_82
END my_first_reached_value,...
from cte
,
您可以使用写三个查询三个条件并使用 union all 来组合如下所示:
SELECT
value_of_column_55,value_of_column_47,6 my_first_reached_value,44 my_second_reached_value,77 my_third_reached_value
FROM my_example_table
WHERE column_a = 1 AND column_b = 2
UNION ALL
SELECT
value_of_column_55,value_of_column_18 my_first_reached_value,value_of_column_66 my_second_reached_value,value_of_column_89 my_third_reached_value
FROM my_example_table
WHERE column_a = 1 AND coulmn_b = 2 AND column_c = 8
UNION ALL
SELECT
value_of_column_55,value_of_column_82 my_first_reached_value,'Some_hardcodedtext' my_second_reached_value,'Some_hardcodedtext_again' my_third_reached_value
FROM my_example_table
WHERE column_a = 1 AND column_b = 2 AND (column_c = 8 or column_r = 22)
但我担心条件被正确提及。您的第二个和第三个条件无法达到,因为第一个条件不可能为假而第二个或第三个条件为真。
当第二个条件为真时,第一个条件为真,当第三个条件为真时,第一个和第二个条件都为真。
请分享示例输入和所需输出,以便我们帮助您构建适当的条件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。