【问题标题】:Case in Select statement returns an errorSelect 语句中的 case 返回错误
【发布时间】:2022-01-17 00:17:00
【问题描述】:
SELECT 
    CONCAT('C','~') AS "1", FFIITMN,
    CASE WHEN FFIITMN IN (SELECT FGDITMN FROM S2151BDW.PWRDTA.FGDPRPIP WHERE FGDCMPN = '  1' THEN '1' ELSE '0' END) AS "16"
FROM 
    S2151BDW.PWRDTA.FFIITMAP --Item master file
    JOIN S2151BDW.PWRDTA.FFJITMBP ON FFJITMN = FFIITMN AND FFJCMPN = FFICMPN --Item balance file
    JOIN S2151BDW.PWRDTA.FFBCLSAP ON FFBCLSN = FFJCLSN AND FFBCMPN = FFICMPN --Item class file

WHERE 
    FFICMPN = '  1' 
AND
    FFIITMN = '    365725'

返回错误:

比较运算符 IN 无效.. SQLCODE=-115, SQLSTATE=42601, DRIVER=3.69.56

是否可以在select中使用case语句来检查项号是否在另一个表中?

【问题讨论】:

  • 请以可读的方式格式化和呈现您的 SQL 查询。

标签: sql select db2 case


【解决方案1】:

您的括号不匹配 - 右括号应位于内部 SELECT 查询的末尾,而不是 CASE 块的末尾:

CASE WHEN FFIITMN IN (SELECT FGDITMN FROM S2151BDW.PWRDTA.FGDPRPIP WHERE FGDCMPN = '  1') THEN '1' ELSE '0' END AS "16"

【讨论】:

  • 是的,很抱歉,我一直在尝试不同的东西,当我以这种方式格式化时,我收到了我发布的错误。内部选择语句工作正常,但运行查询时仍然出现错误。
  • @DanB。什么错误?如果这是您问题中的错误,那么 FFITMN / FGDITMN 列是什么类型?您使用的是哪个特定的 DBMS?
  • Richard, FFIITMN 和 FGDITMN 都是 A,10,这是 AN as400 上的 db2。
  • @DanB。 This thread 看起来是相关的。
  • 谢谢你,Richard,帮了大忙。
猜你喜欢
  • 2012-07-07
  • 1970-01-01
  • 2012-10-03
  • 2023-04-07
  • 2012-01-01
  • 2012-07-27
  • 2014-04-11
  • 2014-12-05
  • 1970-01-01
相关资源
最近更新 更多