Sql 需要帮助从带有clob列的表中获取计数吗

Sql 需要帮助从带有clob列的表中获取计数吗,sql,oracle,Sql,Oracle,表1有两列,如下所示 a with datatype Number b with datatype clob 表1中的数据 a | b 100 | Rock+Y;Paper+No;Scissor+Yes;Dragon+Y;<br> 101 | Rock+N;Paper+No;Scissor+Yes;Dragon+N;<br> 102 | Rock+Y;Paper+Yes;Scissor+N;Dragon+Y; a

表1有两列,如下所示

a with datatype Number
b with datatype clob
表1中的数据

a        |       b
100      | Rock+Y;Paper+No;Scissor+Yes;Dragon+Y;<br>
101      | Rock+N;Paper+No;Scissor+Yes;Dragon+N;<br>
102      | Rock+Y;Paper+Yes;Scissor+N;Dragon+Y;
a | b
100 |岩石+Y;论文+否;剪刀+是;龙+Y
101 |岩石+N;论文+否;剪刀+是;龙+N
102 |岩石+Y;纸+是;剪刀+N;龙+Y;
在表1的第一行中,“岩石”的值是y,“纸”的值是“否”,“剪刀”的值是“是”,“龙”的值是B列中的y。
我想只考虑B、Y和Y和B的剪刀,B列分别为“是”和“是”。br> 我想根据c列的值计算a列的计数。
示例:

对于a=100,仅计算具有值的属性(Rock=Y,Paper=Yes,Scissor+Yes)
即,Rock的值为Y,Scissor的值为Yes,则为2。

类似地,对于a=101,count=1,因为只有剪刀具有所需的值,即“是”,而岩石具有“N”,而纸张具有“否”。

对于a=102,计数=2,岩石和纸张分别具有所需值,即Y和Yes


如何实现此结果?

如果将数据分离为单独的“属性”,则可以使用简单的SQL完成答案。此处使用SUBSTR函数,但也应使用等效的CLOB函数

选项卡包含示例数据 tab_attributes将样本数据分离为属性 tab_nbr将Y转换为1,将N转换为0 最终选择只是将它们相加:

with tab as
(select 100 a, 'Rock+Y;Paper+No;Scissor+Yes;Dragon+Y;' b from dual union
select 101 a, 'Rock+N;Paper+No;Scissor+Yes;Dragon+N;' b from dual union
select 102 a, 'Rock+Y;Paper+Yes;Scissor+N;Dragon+Y;' b from dual 
)
, tab_attributes as
(
select a
, substr(b, instr(b, 'Rock+')+5,1) rock
, substr(b, instr(b, 'Paper+')+6,1) paper
, substr(b, instr(b, 'Scissor+')+8,1) scissor
from tab
)
, tab_nbr as
(select a
, case when rock = 'Y' then 1 when rock = 'N' then 0 else null end as rock 
, case when paper = 'Y' then 1 when paper = 'N' then 0 else null end as paper 
, case when scissor = 'Y' then 1 when scissor = 'N' then 0 else null end as scissor
from tab_attributes
)
select a, rock+paper+scissor cnt from tab_nbr
;

我本打算用
REGEXP\u COUNT
来回答这个问题,但后来我更仔细地阅读了你的解释,发现了一个不一致的地方。你首先说,对于a=100,它应该只计算“Y”,而不是“Yes”,然后你计算了2表示a=101,我无法证明这一点,然后你切换到计算3表示a=102。我在这里看不到任何模式,至少现在是这样。请尝试在此处表示需要匹配的确切条件-是否应计算单号“Y”,或者它也应计算为“是”,如果不总是,请指定这些情况。@mac07-尝试为您的问题编写的查询是什么。也许我们可以帮助您修复您的查询。@g00dy对于a=101,如果其值为Y,则应计算岩石,如果其值为“是”,则应计算纸张,如果其值为“是”,则应计算剪刀。如果岩石是Y,纸张是“是”,剪刀是“是”,则计数将为3。现在清楚了吗?@SudiptaMondal我正在考虑使用Union,但是这个表很大,在这里我只显示了三个属性(岩石、纸和剪刀)(在我的例子中有超过15个属性)。@mac07-如果“剪刀”=N(不要与否混淆),就像a=102一样,会怎么样?关于实际数据有什么规则吗?在任何给定的时间,它可以是N、否、Y或是?您是否考虑将这些数据设置成更结构化的格式,如XML或JSON?如果你能做到的话——我建议你做到,因为这将使以后分析和推断规则变得更简单。另外,您在这里没有明确指定规则,您已经给出了一个示例。规则对A列的所有值都有效。正如我提到的,您提供的案例将在a=102时中断。试着去了解它的本质。