Sql Oracle Case语句赋值时出错

Sql Oracle Case语句赋值时出错,sql,oracle,case,Sql,Oracle,Case,当TBL_C.PAY_代码的值为T时,我想给它分配一个值“F”,但我似乎无法在这个SQL语句中找到错误。我不想对这个普通的SQL语句使用PL/SQL 错误 SQL代码 SELECT TBL_A.ACT_ID, TBL_A.ACT_CODE, TBL_A.ACT_DESC, TBL_A.ACT_DIS_DESC, TBL_B.ACTMAP_ID, TBL_B.CLI_ID FROM CACT TBL_A, CMACTM TBL_B, CMACTDM

当TBL_C.PAY_代码的值为T时,我想给它分配一个值“F”,但我似乎无法在这个SQL语句中找到错误。我不想对这个普通的SQL语句使用PL/SQL

错误

SQL代码

SELECT
    TBL_A.ACT_ID,
    TBL_A.ACT_CODE,
    TBL_A.ACT_DESC,
    TBL_A.ACT_DIS_DESC,
    TBL_B.ACTMAP_ID,
    TBL_B.CLI_ID 
FROM CACT TBL_A, CMACTM TBL_B, CMACTDM TBL_C 
WHERE TBL_A.ACT_ID=TBL_B.ACT_ID AND B.ACTMAP_ID=TBL_C.ACTMAP_ID 
AND TBL_C.CODE = 'Version64'
AND TBL_C.ID='100001000000001'
AND TBL_C.PAY_CODE= CASE
  WHEN TBL_C.PAY_CODE='T' AND TBL_C.CODE ='Version64'
  THEN TBL_C.PAY_CODE='F' <-- ERROR 
  else TBL_C.PAY_CODE='T'
  END;
使用的原始查询:

SELECT TBL_A.ACT_ID, TBL_A.ACT_CODE, TBL_A.ACT_DESC, TBL_A.ACT_DIS_DESC, TBL_B.ACTMAP_ID, TBL_B.CLI_ID 
    FROM CACT TBL_A, CMACTM TBL_B, CMACTDM TBL_C 
    WHERE TBL_A.ACT_ID=TBL_B.ACT_ID AND B.ACTMAP_ID=TBL_C.ACTMAP_ID 
    AND TBL_C.CODE =? (Value is Version64)
    AND TBL_C.ID=? (Value is 100001000000001)
    AND TBL_C.PAY_CODE=? (Either T or F but in the value is set to F)
选择TBL_A.ACT_ID、TBL_A.ACT_code、TBL_A.ACT_DESC、TBL_A.ACT_DIS_DESC、TBL_B.ACTMAP_ID、TBL_B.CLI_ID
来自CACT TBL_A、CMACTM TBL_B、CMACTDM TBL_C
其中TBL_A.ACT_ID=TBL_B.ACT_ID和B.ACTMAP_ID=TBL_C.ACTMAP_ID
和TBL_C.CODE='Version64'
和TBL_C.ID='100001000000000001'
和TBL_C.支付代码=案例
当TBL_.C.PAY_CODE='T'和TBL_.C.CODE='Version64'

那好问题,迪马斯!我不清楚您想要的逻辑,但似乎您想要返回
BL\u C.PAY\u code='T'
TBL\u C.code='Version64'
BL\u C.PAY\u code='F'
的记录。如果是这样的话,我会写:

SELECT
    TBL_A.ACT_ID,
    TBL_A.ACT_CODE,
    TBL_A.ACT_DESC,
    TBL_A.ACT_DIS_DESC,
    TBL_B.ACTMAP_ID,
    TBL_B.CLI_ID 
FROM CACT TBL_A, CMACTM TBL_B, CMACTDM TBL_C 
WHERE TBL_A.ACT_ID=TBL_B.ACT_ID AND B.ACTMAP_ID=TBL_C.ACTMAP_ID 
AND TBL_C.ID='100001000000001'
AND ((TBL_C.PAY_CODE='T' AND TBL_C.CODE ='Version64')
    OR TBL_C.PAY_CODE='F');

如果我误读了您想要的结果,请澄清,我会更新答案。

好的,那么我有什么想法可以让TBL_C.PAY_代码具有F值,即使其值为T?是的。请参见下面的正确语法。tnx Mitch我将尝试您建议的一种方法
TBL_C.PAY_code
如何同时等于
T
F
?我将尝试在
Where
子句中使用
而不是
Case
,但我无法确定您想要的逻辑。您是否试图返回
TBL\u C.PAY\u code='T'
TBL\u C.code='Version64'
TBL\u C.PAY\u code='F'
TBL\u C.code
不是
'Version64'
的所有记录?@Ron Smith:您尝试的编辑对答案(或问题)几乎没有价值hi mitch感谢您的提示,您的建议消除了错误,但我无法使用此查询检索任何行。我可能会对此进行调整。请参阅此位:TBL_C.CODE='Version64',它在那里出现了两次。@Mitch,大多数人都同意格式化代码对于可读性有一定的价值。@dinas“与其展示您所感知的解决方案,不如告诉我们查询的预期结果。嗨,Ron,请查看更新并感谢您的回答我实际上尝试了几乎相同的解决方案,但无法使其发挥作用。
SELECT TBL_A.ACT_ID, TBL_A.ACT_CODE, TBL_A.ACT_DESC, TBL_A.ACT_DIS_DESC, TBL_B.ACTMAP_ID, TBL_B.CLI_ID 
    FROM CACT TBL_A, CMACTM TBL_B, CMACTDM TBL_C 
    WHERE TBL_A.ACT_ID=TBL_B.ACT_ID AND B.ACTMAP_ID=TBL_C.ACTMAP_ID 
    AND TBL_C.CODE =? (Value is Version64)
    AND TBL_C.ID=? (Value is 100001000000001)
    AND TBL_C.PAY_CODE=? (Either T or F but in the value is set to F)
SELECT TBL_A.ACT_ID, TBL_A.ACT_CODE, TBL_A.ACT_DESC, TBL_A.ACT_DIS_DESC, TBL_B.ACTMAP_ID, TBL_B.CLI_ID 
FROM CACT TBL_A, CMACTM TBL_B, CMACTDM TBL_C 
WHERE TBL_A.ACT_ID=TBL_B.ACT_ID AND B.ACTMAP_ID=TBL_C.ACTMAP_ID 
AND TBL_C.CODE = 'Version64'
AND TBL_C.ID='100001000000001'
AND TBL_C.PAY_CODE= CASE
  WHEN TBL_C.PAY_CODE='T' AND TBL_C.CODE ='Version64'
  THEN 'F'    <-------------
  else 'T'    <-------------
  END;
SELECT
    TBL_A.ACT_ID,
    TBL_A.ACT_CODE,
    TBL_A.ACT_DESC,
    TBL_A.ACT_DIS_DESC,
    TBL_B.ACTMAP_ID,
    TBL_B.CLI_ID 
FROM CACT TBL_A, CMACTM TBL_B, CMACTDM TBL_C 
WHERE TBL_A.ACT_ID=TBL_B.ACT_ID AND B.ACTMAP_ID=TBL_C.ACTMAP_ID 
AND TBL_C.ID='100001000000001'
AND ((TBL_C.PAY_CODE='T' AND TBL_C.CODE ='Version64')
    OR TBL_C.PAY_CODE='F');