Sql “Case”在另一个值条件中
我试着在另一个CASE表达式中做一个CASE。事实上,情况是:Sql “Case”在另一个值条件中,sql,oracle,Sql,Oracle,我试着在另一个CASE表达式中做一个CASE。事实上,情况是: (SELECT cmp_tubo FROM qt_qts.res_tubo_serra WHERE res_tubo_serra.cod_ordem_producao = ro.cod_ordem_producao AND res_tubo_serra.idc_tubo = ro.idc_tubo AND res_tubo_serra.idc_serra != 0 ) AS cmp_corte_ponta 我需要的是:
(SELECT cmp_tubo
FROM qt_qts.res_tubo_serra
WHERE res_tubo_serra.cod_ordem_producao = ro.cod_ordem_producao AND res_tubo_serra.idc_tubo = ro.idc_tubo
AND res_tubo_serra.idc_serra != 0
) AS cmp_corte_ponta
我需要的是:
如果cmp_corte_ponta的值=0,则我需要执行此搜索并替换cmp_corte_ponta的值:
Select
(CASE serra.tip_corte
WHEN '1' THEN to_char(SERRA.CMP_CORTE)
ELSE 'NO'
END
) cmp_corte_ponta
from fl_qts.res_tubo_serra_feixe serra
如果cmp_corte_ponta!=0,则该值必须保持不变
我应该使用哪种语法
谢谢
*编辑代码*
现在的错误是:
ORA-01427-单行子查询返回多行。原始但混乱的数据类型:
选择合并
努利夫
选择cmp_tubo
来自qt_qts.res_tubo_serra
其中res_tubo_serra.cod_ordem_producao=ro.cod_ordem_producao
和res_tubo_serra.idc_tubo=ro.idc_tubo
和res_tubo_serra.idc_serra!=0
, 0,
选择
案例serra.tip_corte
当'1'时,则发送到\u charSERRA.CMP\u CORTE
否则“不”
结束cmp_corte_ponta
来自fl_qts.res_tubo_serra_feixe serra
编辑更正的数据类型。NULLIF和COALESCE都需要所有参数类型相同,可能会发生强制:
选择合并
努利夫
选择以_charcmp_tubo
来自qt_qts.res_tubo_serra
其中res_tubo_serra.cod_ordem_producao=ro.cod_ordem_producao
和res_tubo_serra.idc_tubo=ro.idc_tubo
和res_tubo_serra.idc_serra!=0
, '0',
选择
案例serra.tip_corte
当'1'时,则发送到\u charSERRA.CMP\u CORTE
否则“不”
结束cmp_corte_ponta
来自fl_qts.res_tubo_serra_feixe serra
我可能会尝试一些嵌套的解码语句,因为您要处理的值很少:
(SELECT decode(cmp_tubo,
0, (SELECT decode(serra.tip_corte,
'1', to_char(serra.cmp_corte),
'NO')
FROM fl_qts.res_tubo_serra_feixe serra),
cmp_tubo)
FROM qt_qts.res_tubo_serra
WHERE res_tubo_serra.cod_ordem_producao = ro.cod_ordem_producao AND res_tubo_serra.idc_tubo = ro.idc_tubo
AND res_tubo_serra.idc_serra != 0
) AS cmp_corte_ponta
这里是什么?我在这两种说法中都没有看到这个别名,感觉非常相关。也就是说,将CASE表达式嵌套在彼此内部是完全合法的,就像CASE WHEN-THEN-ELSE-END-WHEN-END-THEN-ENDSample数据和期望的结果一样。@Barbaros好吧,文档中说Oracle中有一个NULLIF函数:没错,非常感谢,我到目前为止从未见过,即使作为一名甲骨文人员:+1,我也尝试过这种方式,但它产生了一个错误,即:ORA-00932。所需的数量已获取字符。我将“0”替换为“否”,但仍发现错误。cmp_corte是什么数据类型?你为什么要申请它?合并需要相同数据类型的参数。如果您想得到这个“否”,您可能还需要对cmp_tubo进行charify处理,不要忘记将NULLIF的第二个参数也更改为“0”。我要编辑我的答案你能把你的代码添加到你的问题中吗?带着错误。
(SELECT decode(cmp_tubo,
0, (SELECT decode(serra.tip_corte,
'1', to_char(serra.cmp_corte),
'NO')
FROM fl_qts.res_tubo_serra_feixe serra),
cmp_tubo)
FROM qt_qts.res_tubo_serra
WHERE res_tubo_serra.cod_ordem_producao = ro.cod_ordem_producao AND res_tubo_serra.idc_tubo = ro.idc_tubo
AND res_tubo_serra.idc_serra != 0
) AS cmp_corte_ponta