SELECT ..一个复杂的表达式.. FROM CH_CUST CA ORDER BY CA.BCUSTID 报错 CA.BCUSTID不存在,为什么?如何解决?

问题遇到的现象和发生背景

SELECT CA.BCUSTID 儿童CUSTID, FUNC_GETDICTNAME('comm_yesorno', CASE WHEN SUM(1) OVER(PARTITION BY BCUSTID) > 0 THEN 'Y' ELSE 'N' END) 有效会员
FROM CH_CUST CA
ORDER BY CA.BCUSTID;
报错说CA.BCUSTID不存在。

DB2 查询时使用自定义FUNCTION和CASE WHEN和SUM() OVER(),语句最后的ORDER BY中的 ALIAS失效了

问题相关代码
-- ##查询语句
SELECT
  CA.BCUSTID 儿童CUSTID,
  FUNC_GETDICTNAME('comm_yesorno',
    CASE
      WHEN CA.JOINDATE >= '2022-08-01'
        AND CA.ISCARD = 'Y'
        AND SUM(CA.DEPOSBAL) OVER(PARTITION BY CA.BCUSTID) >= 1000
      THEN  'Y'
      ELSE  'N'
    END
  )  有效会员
FROM  CH_CUST  CA
ORDER BY CA.BCUSTID DESC;

表结构及数据如下

-- ## 会员表
CREATE TABLE CH_CUST(
  BCUSTID  BIGINT,--小孩CUSTID
  BCUSTNAME  VARCHAR(100),--小孩姓名
  FAMCUSTID  BIGINT,--家长CUSTID
  JOINDATE  DATE,--入会日期
  ISCARD  VARCHAR(1),--家长是否有卡
  DEPOSBAL  DECIMAL(13, 2)--家长存款金额
);
INSERT INTO CH_CUST VALUES
(1, '儿童1', 2, '2022-08-01', 'Y', 500),
(1, '儿童1', 3, '2022-08-01', 'N', 500);
--## 字典相关
CREATE TABLE "EOS_DICT_ENTRY"  (
          "DICTTYPEID" VARCHAR(128) NOT NULL , 
          "DICTID" VARCHAR(128) NOT NULL , 
          "DICTNAME" VARCHAR(255) , 
          "STATUS" INTEGER , 
          "SORTNO" INTEGER , 
          "RANK" INTEGER , 
          "PARENTID" VARCHAR(255) , 
          "SEQNO" VARCHAR(255) , 
          "FILTER1" VARCHAR(255) , 
          "FILTER2" VARCHAR(255) )  ;

INSERT INTO PBANK.EOS_DICT_ENTRY
(DICTTYPEID, DICTID, DICTNAME, STATUS, SORTNO, "RANK", PARENTID, SEQNO, FILTER1, FILTER2)
VALUES('comm_yesorno', 'N', '否', 1, 2, 1, NULL, '.N.', NULL, NULL);
INSERT INTO PBANK.EOS_DICT_ENTRY
(DICTTYPEID, DICTID, DICTNAME, STATUS, SORTNO, "RANK", PARENTID, SEQNO, FILTER1, FILTER2)
VALUES('comm_yesorno', 'Y', '是', 1, 1, 1, NULL, '.Y.', NULL, NULL);


CREATE OR REPLACE FUNCTION FUNC_GETDICTNAME (
    IN_DICTTYPEID    VARCHAR(128),
    IN_DICTID    VARCHAR(128) )
  RETURNS VARCHAR(255)
F1: BEGIN ATOMIC
      DECLARE V_DICTNAME VARCHAR(255) DEFAULT NULL;
      -- ## 获取数据字典项NAME ## --
      SET V_DICTNAME = (
          SELECT COALESCE(DICTNAME,'') FROM EOS_DICT_ENTRY WHERE DICTTYPEID = IN_DICTTYPEID AND DICTID = IN_DICTID 
          FETCH FIRST 1 ROWS ONLY
      );
      
      -- ## 设置返回值 ## --
      IF(V_DICTNAME IS NULL) THEN 
          RETURN '';
      ELSE
          RETURN V_DICTNAME;
      END IF;
END
运行结果及报错内容

这条语句执行后报错:"CA.BCUSTID" is not valid in the context where it is used.. SQLCODE = -206, SQLSTATE=42703, DRIVER=3.72.24

我的解答思路和尝试过的方法

1、ORDER BY CA.BCUSTID换成ORDER BY 儿童CUSTID 不会报错
2、FUNC_GETDICTNAME()删掉,保留()里面的CASE WHEN和SUM() OVER(),不会报错
3、SUM() OVER()及里面的内容删掉换成个1 = 1,不会报错

我想要达到的结果

SELECT CA.BCUSTID 儿童CUSTID, FUNC_GETDICTNAME('comm_yesorno', CASE WHEN SUM(1) OVER(PARTITION BY BCUSTID) > 0 THEN 'Y' ELSE 'N' END) 有效会员
FROM CH_CUST CA
ORDER BY CA.BCUSTID;
为什么会说CA.BCUSTID不存在?
是因为FUNC_GETDICTNAME()和SUM() OVER()一起用导致结果集的结构改变了吗?

你这个是什么数据库。MySQL 还是 DB2 ?

看一下是不是 sql_mode这个属性值导致的

https://www.oschina.net/question/12_2183893

是不是因为查索引时不存在得