我有一个字符串,它是一个存储在表中的逗号分隔值。我想要字符串中每个项目的描述和计数。因此,如果一个记录包含字符串' YL',我想得到' YL描述',1。但是如果记录有' YL,YB,YB' ,我想得到' YL描述',1和' YB描述',2。
使用以下假表创建数据:
create table temp1 (cd_vals varchar2(20 byte));
insert into temp1 (cd_vals) values ('YB,YL');
insert into temp1 (cd_vals) values ('YB,YL,YL,YL');
insert into temp1 (cd_vals) values ('YL');
create table temp2 (cd_val varchar2(2 byte), cd_desc varchar2(20 byte));
insert into temp2 (cd_val, cd_desc) values ('YB','YB Description');
insert into temp2 (cd_val, cd_desc) values ('YL','YL Description');
我有一个查询,它返回table1中的每个值,查找描述以及每个原始字符串中所有实例的计数。 (Split可能是我们系统内部的一个函数,但是它采用逗号分隔的字符串并返回每个条目。如果我可以绕过它,我应该能够在解决方案中使用它。)
使用此查询:
SELECT t1.cd_vals
, t2.cd_desc
, regexp_count(t1.cd_vals, '[^,]+')
FROM temp1 t1
join temp2 t2
on rtrim(t2.cd_val) in (select column_value from table(split(rtrim(t1.cd_vals))))
order by cd_vals;
我得到以下结果:
cd_vals cd_desc count
YB,YL YB Description 2
YB,YL YL Description 2
YB,YL,YL,YL YL Description 4
YB,YL,YL,YL YB Description 4
YL YL Description 1
但我真正想要的是:
cd_vals cd_desc count
YB,YL YB Description 1
YB,YL YL Description 1
YB,YL,YL,YL YL Description 1
YB,YL,YL,YL YB Description 3
YL YL Description 1
如何获取最后一个计数字段,以便显示第一个字符串中特定查找值的计数?
相关,但似乎并非我正在寻找的是Count number of occurrences of keyword in comma separated column?和How to get the count of occurrence from comma separated string。 (或者我可能只是不太正确地看着它们。)
答案 0 :(得分:3)
这是你想要的吗?
SELECT cd_vals, cd_val, COUNT(1)
FROM (SELECT cd_vals,COLUMN_VALUE cd_val
FROM temp1 t1, table(split(rtrim(t1.cd_vals))))
JOIN temp2
USING (cd_val)
GROUP BY cd_vals, cd_val
CD_VALS CD_VAL COUNT(1)
----------- ------ --------
YB,YL YB 1
YB,YL,YL,YL YL 3
YL YL 1
YB,YL YL 1
YB,YL,YL,YL YB 1
5 rows returned.