我做了这个查询,它工作,但有可能做一些更有效和可读?我只是想有一个查询的结果(我不想使用pl/sql).最好的是将when条件存储在一个变量中,但我不知道这是否可能.
SELECT
CASE WHEN (SELECT min(handling_unit_id) FROM ifsapp.handling_unit_shipment where
shipment_id = '1371'
AND ifsapp.HANDLING_UNIT_TYPE_API.Get_Handling_Unit_Category_Id(handling_unit_type_id) like 'SST_N1'
and structure_level = 1) is not null
THEN (SELECT min(handling_unit_id) FROM ifsapp.handling_unit_shipment where
shipment_id = '1371'
AND ifsapp.HANDLING_UNIT_TYPE_API.Get_Handling_Unit_Category_Id(handling_unit_type_id) like 'SST_N1'
and structure_level = 1)
ELSE (SELECT min(handling_unit_id) FROM ifsapp.handling_unit_shipment where
shipment_id = '1371'
AND ifsapp.HANDLING_UNIT_TYPE_API.Get_Handling_Unit_Category_Id(handling_unit_type_id) like 'SST_N1'
and structure_level > 1)
END HUI FROM dual ;
4条答案
按热度按时间j2cgzkjk1#
您可以使用以下查询(如果您需要当前示例中的单个值):
它将做什么:
1.它按
structure_level
对数据进行升序排序,因此如果structure_level >= 1
存在,则返回structure_level = 1
作为第一行,如果不存在,则返回structure_level > 1
。1.如果每个结构值有许多
handling_unit_id
,那么它将把最少的handling_unit_id
放在第一行,这相当于min
。wmvff8tz2#
您可以使用coalesce函数使其更紧凑一些
coalesce函数基本上返回其输入参数中的第一个非空值
mwkjh3gx3#
您可以使用查询因子分解或common-table-expression。
c86crjj04#
另一种选择。找出所有三个查询的共同点,并在CTE(
WITH
子句)中执行一次。然后以各自的方式查询,以查找每种情况下的不同之处。执行CASE/IF-THEN类型逻辑有多种模式。这里有一种方法。它使用一个棘手的SIGN
操作,以便将所有〉1的structure_level值组合在一起。