我在Oracle上有以下SQL查询
SELECT
CASE
WHEN (SELECT DISTINCT(trim(z.m_base_acct))
FROM acc_mapping_rep z
WHERE z.m_dyn_acct=b.m_en_credit
AND z.M_REF_DATA =b.M_REF_DATA) IN 'SAMANOS'
THEN '7200000888001X'
END AS M_EN_CRDR
FROM
acc_journal_rep b
AND b.m_ref_data = 41091
AND b.m_en_date = '21-SEP-15'
AND b.m_entity = 'LN'
AND b.m_nb_trn = 0
我有oracle错误ORA-01427。由于条件知道我确实把IN运算符放在了相同的情况下我有一个案例。 请指教。我需要在案例条件中有多个值。
答案 0 :(得分:2)
如果您已经展示了只有一个要比较的值'SAMANOS'
,那么您可以只交换条款:
SELECT
CASE
WHEN 'SAMANOS' IN (SELECT DISTINCT(trim(z.m_base_acct))
FROM acc_mapping_rep z
WHERE z.m_dyn_acct=b.m_en_credit
AND z.M_REF_DATA =b.M_REF_DATA)
THEN '7200000888001X'
END AS M_EN_CRDR
...
您也可以左键加入acc_mapping_rep
表格,但distinct
和trim
稍微有点担心 - 如果真的需要这些,那么它会变得有点复杂而你呢? d需要左连接到该表的内联视图。
b.m_en_date = '21-SEP-15'
也令人担忧;如果m_en_date
是DATE列,那么您将依赖隐式转化和会话NLS设置。最好使用to_date()
,或使用固定值作为日期文字:b.m_en_date = date '2015-09-21'
。
原始的较长代码也可以从使用ANSI连接而不是旧的Oracle特定(+)
外连接运算符中受益。