Oracle ORA-00936:缺少表达式用例语句

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,

使用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 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”的示例,但没有意识到您在那里使用了别名。