在做OA表单开发的时候,经常会碰到一个字段用逗号或者其他分隔符存多个信息,例如一张表单中有一个附件控件,存储了多个附件的ID,中间用逗号隔开,这时候我们如果要通过附件ID抓取附件详细信息,如果使用LIKE,效率不高,因此需要将这个字段通过逗号分隔行转列。
注:该方法是在Oracle数据库中实现的,SQL Server或者Mysql 需要进行修改。
下面是实现的示例:
数据格式如:
实现代码:
SELECT T.ID, T.INSTANCEID, T.TITLE, T.SNO, A.ID AS ATTACHID, '附件:'||A.SOURCEFILE AS SOURCEFILE, '0' AS TYPE FROM ( SELECT DISTINCT ID, INSTANCEID, TITLE, SNO, SUBSTR(T.CA,INSTR(T.CA, ',', 1, C.LV) + 1,INSTR(T.CA, ',', 1, C.LV + 1) - (INSTR(T.CA, ',', 1, C.LV) + 1)) AS FUJIAN FROM ( SELECT C.ID, C.INSTANCEID, C.TITLE, C.SNO, ',' || FUJIAN || ',' AS CA, LENGTH(FUJIAN || ',') - NVL(LENGTH(REPLACE(FUJIAN, ',')), 0) AS CNT FROM XMHX_XZ_JSTZTBZZ C WHERE FUJIAN IS NOT NULL ) T, ( SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 50 --其中“LEVEL <= 50”中的数字50代表匹配字段内容中出现逗号的次数 ) C ) T LEFT JOIN EFORM_ATTACH A ON T.FUJIAN=A.ID WHERE T.FUJIAN IS NOT NULL