![](/img/trans.png)
[英]How can I make cx-oracle bind the results of a query to a dictionary rather than a tuple?
[英]Is there a way I can make the CASE WHEN test one of the results rather than running it twice?
有没有一种方法可以将CASE WHEN测试中的值用作其结果之一,而无需两次写出select语句(因为它可能很长且很乱)? 例如:
SELECT id,
CASE WHEN (
(SELECT MAX(value) FROM my_table WHERE other_value = 1) IS NOT NULL
)
THEN (
SELECT (MAX(value) FROM my_table WHERE other_value = 1
)
ELSE 0
END AS max_value
FROM other_table
有没有办法将SELECT语句的第一次运行(用于测试)的结果也用作THEN值? 我在第一个SELECT之后尝试使用“ AS max_value”,但它给了我一个SQL错误。
更新 :糟糕,正如汤姆·H(Tom H.)所指出的,我忘记了原始问题中的“ IS NOT NULL”。
您的陈述是否还运行? 它不是CASE语句中的布尔表达式。 如果您不使用布尔值,MySQL是否默认检查NULL值?
我认为这可能是您要寻找的:
SELECT
id,
COALESCE(
(
SELECT
MAX(value)
FROM
My_Table
WHERE
other_value = 1
), 0) AS max_value
FROM
Other_Table
本示例说明如何在子查询中准备一堆值,并在外部SELECT的CASE中使用它们。
select
orderid,
case when maxprice is null then 0 else maxprice end as maxprice
from (
select
orderid = o.id,
maxprice = (select MAX(price) from orderlines ol
where ol.orderid = o.id)
from orders o
) sub
不确定这是否是您要查找的内容,问题尚不清楚(例如,您的2个MAX()查询似乎是完全相同的副本。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.