Sql “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 我需要的是:

我试着在另一个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
我需要的是:

如果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