Oracle ORA-00936:缺少表达式用例语句
使用case语句执行此select时收到上述错误。我尝试了几种方法,但无法获得正确的语法Oracle ORA-00936:缺少表达式用例语句,oracle,select,case,Oracle,Select,Case,使用case语句执行此select时收到上述错误。我尝试了几种方法,但无法获得正确的语法 SELECT m.md_security_id, thv.unit_qty, thv.contract_value_amt, thv.contract_currency_cd, (case when THV.BORROW_LOAN_TYPE_CD = 'B' then select THV.SENDER_ORG_ID as BORROWER_ORG_ID,
SELECT m.md_security_id,
thv.unit_qty,
thv.contract_value_amt,
thv.contract_currency_cd,
(case when
THV.BORROW_LOAN_TYPE_CD = 'B'
then select THV.SENDER_ORG_ID as BORROWER_ORG_ID,
select THV.RECIPIENT_ORG_ID as LENDER_ORG_ID
end),
(case when
THV.BORROW_LOAN_TYPE_CD = 'L'
THEN select THV.RECIPIENT_ORG_ID as BORROWER_ORG_ID,
select THV.SENDER_ORG_ID as LENDER_ORG_ID
end)
FROM eqmddev.txn_header_mv thv,
eqmddev.md_security m,
eqmddev.security_xref_vw_tbl x
WHERE m.isin = x.security_id
AND ThV.SECURITY_MASTER_ID = X.SECURITY_MASTER_ID
AND M.EXCHANGE_CD = X.EXCHANGE_CD
您需要像这样重写查询:
SELECT m.md_security_id,
thv.unit_qty,
thv.contract_value_amt,
thv.contract_currency_cd,
case
when THV.BORROW_LOAN_TYPE_CD = 'B' then THV.SENDER_ORG_ID
when THV.BORROW_LOAN_TYPE_CD = 'L' THEN THV.RECIPIENT_ORG_ID
end AS BORROWER_ORG_ID,
case
when THV.BORROW_LOAN_TYPE_CD = 'B' then THV.RECIPIENT_ORG_ID
when THV.BORROW_LOAN_TYPE_CD = 'L' THEN THV.SENDER_ORG_ID
end AS LENDER_ORG_ID,
FROM eqmddev.txn_header_mv thv,
eqmddev.md_security m,
eqmddev.security_xref_vw_tbl x
WHERE m.isin = x.security_id
AND ThV.SECURITY_MASTER_ID = X.SECURITY_MASTER_ID
AND M.EXCHANGE_CD = X.EXCHANGE_CD
基本上,您不能从CASE语句返回多个列。将其视为单个列的条件替换。在上面的例子中,我对借款人组织ID
和贷款人组织ID
别名使用了相同的案例条件
在Stand Note中,您还应该考虑在您的案例中包含一个ELSE语句。否则,如果
THV.BORROW\u LOAN\u TYPE\u CD
不是B
或L
,您将得到null您需要像这样重写查询:
SELECT m.md_security_id,
thv.unit_qty,
thv.contract_value_amt,
thv.contract_currency_cd,
case
when THV.BORROW_LOAN_TYPE_CD = 'B' then THV.SENDER_ORG_ID
when THV.BORROW_LOAN_TYPE_CD = 'L' THEN THV.RECIPIENT_ORG_ID
end AS BORROWER_ORG_ID,
case
when THV.BORROW_LOAN_TYPE_CD = 'B' then THV.RECIPIENT_ORG_ID
when THV.BORROW_LOAN_TYPE_CD = 'L' THEN THV.SENDER_ORG_ID
end AS LENDER_ORG_ID,
FROM eqmddev.txn_header_mv thv,
eqmddev.md_security m,
eqmddev.security_xref_vw_tbl x
WHERE m.isin = x.security_id
AND ThV.SECURITY_MASTER_ID = X.SECURITY_MASTER_ID
AND M.EXCHANGE_CD = X.EXCHANGE_CD
基本上,您不能从CASE语句返回多个列。将其视为单个列的条件替换。在上面的例子中,我对借款人组织ID
和贷款人组织ID
别名使用了相同的案例条件
在Stand Note中,您还应该考虑在您的案例中包含一个ELSE语句。否则,如果
THV.BORROW\u LOAN\u TYPE\u CD
不是B
或L
你会得到空值你最好解释一下你想要实现什么。您当前的查询没有多大意义。我想我知道你需要什么,直到我试着编辑和修复它,然后意识到…有些东西丢失了。在您的案例中选择是一个问题;据我所知,您不能从一个案例中返回多个列。我看得更多,为什么不完全跳过这个案例,在一列中返回借贷者组织id,在下一列中返回借贷者组织id?看起来您的布局在当前状态下非常混乱。该案例是业务逻辑所必需的。我想如果我不能在case语句中返回多个select,我需要使用另一种方法。谢谢。你最好解释一下你想要实现什么。您当前的查询没有多大意义。我想我知道你需要什么,直到我试着编辑和修复它,然后意识到…有些东西丢失了。在您的案例中选择是一个问题;据我所知,您不能从一个案例中返回多个列。我看得更多,为什么不完全跳过这个案例,在一列中返回借贷者组织id,在下一列中返回借贷者组织id?看起来您的布局在当前状态下非常混乱。该案例是业务逻辑所必需的。我想如果我不能在case语句中返回多个select,我需要使用另一种方法。谢谢,谢谢你!!!!工作完美。我看到了带有“end as”的示例,但没有意识到您在那里使用了别名。谢谢!!!!工作完美。我看到了带有“end as”的示例,但没有意识到您在那里使用了别名。