我正在尝试在另一个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,则该值必须仍然相同。
我应该使用哪种语法?
谢谢!
*编辑代码*
select
pla.cod_pedido,
pla.cod_aqa,
coalesce (
NULLIF(
(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)
, 0),
(SELECT
(CASE serra.tip_corte
WHEN '1' THEN SERRA.CMP_CORTE
ELSE 0
END)
FROM fl_qts.res_tubo_serra_feixe serra)) as cmp_corte_ponta,
pla.another_collum
FROM qt_qts.res_tubo_secao_od ro...
现在的错误是:
“ ORA-01427-“单行子查询返回多个行”。
答案 0 :(得分:1)
原始,但弄乱了数据类型:
SELECT COALESCE(
NULLIF(
(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)
, 0),
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
)
编辑已更正的数据类型。 NULLIF()
和COALESCE()
都需要所有参数类型都相同(可能会发生强制转换):
SELECT COALESCE(
NULLIF(
(SELECT to_char(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)
, '0'),
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
)
答案 1 :(得分: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