问题描述
select count(*) from dual where 'A0132' in ( select column_value from table (select split(WMSYS.WM_concat(industrytypeno), ',') from map_industry mi where mi.newmaterial is not null ) )谁能帮我解答一下这段SQL的意思。
解决方案
select split(WMSYS.WM_concat(industrytypeno), ',') from map_industry mi where mi.newmaterial is not null 查出来是一张表 aselect column_value from a 查出来是单列的表Bselect count(*) from dual where 'A0132' in(B表的这一列)
解决方案二:
WMSYS.WM_concat是聚合函数,它会把符合条件的数据用","逗号隔开串联在一起。spilt是你自定义函数,根据上下文分析,它应该解析"aa,bb,cc"这种字符串,返回一个嵌套表(比如:r(1)="aa",r(2)="bb",r(3)="cc")。table (select split(WMSYS.WM_concat(industrytypeno), ',') 这句是通过table函数将嵌套表转化为伪表,放到子查询中,相当于:aabbcc最后外层查询是检索'A0132'在上面结果集的纪录数。明白了吗
解决方案三:
wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行
解决方案四:
split(WMSYS.WM_concat(industrytypeno), ',') 这句话用到了两个函数,对一个列处理spilt是分割成(*,‘,’)用逗号分割成列列名应该是:column_value