首页 > 解决方案 > DB2 使用 CASE 替换字符串时

问题描述

我的问题是我将列 col2 的值连接起来,但When我必须将它们替换为Then. 出于某种原因,当我将此代码放入查询中时,我的代码不起作用,还有其他方法吗?在这种情况下使用 Replace 会好吗?你能举个例子吗?

所以我的代码是这个:

cte(col1, AliasCol) as
(Select col1,
    CASE
    WHEN Replace(Replace( LISTAGG(DISTINCT CONCAT( ', ', col2)) WITHIN GROUP 
        (ORDER BY CONCAT( ', ',col2)),',',''),' ','') = 'A' THEN 'Z'
    WHEN Replace(Replace( LISTAGG(DISTINCT CONCAT( ', ', col2)) WITHIN GROUP 
        (ORDER BY CONCAT( ', ', col2)),',',''),' ','') = 'B' THEN 'Y'    
    WHEN Replace(Replace( LISTAGG(DISTINCT CONCAT( ', ', col2)) WITHIN GROUP 
        (ORDER BY CONCAT( ', ', col2)),',',''),' ','') = 'C' THEN 'X'    
    END 
    FROM Table
    Where 
    col2 IN ('A','B','C','D')
    and col >= (select TodaysDate from Date)
    GROUP By col1
)

我的输出应该是:ZYXD

编辑:

我的col2专栏显示所有代码,如下所示:

A
B
C
D

在我将它们连接到这个之后ABCD,值ABCD应该被替换为ZYXD. 用“Z”替换“A”,用“B”替换“Y”,用“X”替换“C”。

标签: db2

解决方案


尝试这个:

WITH MYTAB(COL1, COL2) AS
(
VALUES
  (1, 'A')
, (1, 'A')
, (1, 'B')
, (1, 'C')
, (1, 'D')
)
SELECT 
  COL1
, TRANSLATE(LISTAGG(DISTINCT COL2) WITHIN GROUP (ORDER BY COL2), 'ZYX', 'ABC') MY_OUT 
FROM MYTAB
GROUP BY COL1;

推荐阅读