DB2在以下情况下使用CASE替换字符串
我的问题是我连接了这些值列col2的,但在DB2在以下情况下使用CASE替换字符串,db2,Db2,我的问题是我连接了这些值列col2的,但在中,当时,我必须用值替换它们在中,然后。出于某种原因,当我将此代码放入查询时,我的代码不起作用,还有其他方法吗?在这种情况下,使用Replace好吗?你能举个例子吗 所以我的代码是: cte(col1, AliasCol) as (Select col1, CASE WHEN Replace(Replace( LISTAGG(DISTINCT CONCAT( ', ', col2)) WITHIN GROUP (
中,当
时,我必须用值替换它们在中,然后
。出于某种原因,当我将此代码放入查询时,我的代码不起作用,还有其他方法吗?在这种情况下,使用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
。将“A”替换为“Z”,将“Y”替换为“B”,将“C”替换为“X”。尝试以下方法:
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;
试试这个:
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;
你的问题不够清楚。编辑它并提供输入数据的样本,以及您想要的结果。您正在对值的子集使用LISTAGG,这将聚合组内的值。但在最后,您将它与单个字符值进行比较。。。对我来说没有意义@SamuelPizarro done.CXLSX,翻译是您的最佳选择,@Mark Barinstein回答了以下问题。您的问题不够清楚。编辑它并提供输入数据的样本,以及您想要的结果。您正在对值的子集使用LISTAGG,这将聚合组内的值。但在最后,您将它与单个字符值进行比较。。。对我来说没有意义@SamuelPizarro done.CXLSX,翻译是您的最佳选择,@Mark Barinstein回答道。