-- 字段含有逗號(hào)分隔的,如何把這條記錄按分隔符分成多條記錄;
CREATE TABLE T_TST_INFO
(
PERSON_ID NUMBER,
PERSON_NAME VARCHAR(20),
TYPE_ID VARCHAR(200)
);
INSERT INTO T_TST_INFO
SELECT 1, '張三', '1,2' FROM DUAL
UNION ALL
SELECT 2, '李四', '1' FROM DUAL
SELECT * FROM T_TST_INFO
SELECT PERSON_ID,
PERSON_NAME,
REGEXP_SUBSTR(TYPE_ID, '[^,]+', 1, LEVEL) TYPE_ID
FROM T_TST_INFO
CONNECT BY LEVEL <= REGEXP_COUNT(TYPE_ID, ',') + 1
AND PERSON_ID = PRIOR PERSON_ID
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL;
-- AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
-- 避免CONNECT BY 遞歸循環(huán);
SELECT DISTINCT PERSON_ID,
PERSON_NAME,
LEVEL,
REGEXP_SUBSTR(TYPE_ID, '[^,]+', 1, LEVEL) TYPE_ID
FROM T_TST_INFO
CONNECT BY LEVEL <= REGEXP_COUNT(TYPE_ID, ',') + 1;
-- 0201.單科明細(xì)表客觀題計(jì)算;
-- 原始表
/*SELECT * FROM T_SCN_RCG_OMR
WHERE T_SCN_RCG_OMR.EXAM_COURSE_ID = '3208075F3F8A4BD19032B41331A1C133'
AND T_SCN_RCG_OMR.TEST_NO = '1610603';*/
-- 得到5列:EXAM_COURSE_ID,TEST_NO,QUESTIONS_ID,QUESTIONS_NAME,ANSWERS
SELECT
M1.EXAM_COURSE_ID
,M1.TEST_NO
,M2.QUESTIONS_ID
,M2.QUESTIONS_NAME
,M2.ANSWERS
FROM (
SELECT T_SCN_RCG_OMR.TEST_NO,
T_SCN_RCG_OMR.EXAM_COURSE_ID,
LEVEL ROW_INDEX,
REGEXP_SUBSTR(SCORE_DETAIL, '[^,]+', 1, LEVEL) SCORE_DETAIL
FROM T_SCN_RCG_OMR
WHERE T_SCN_RCG_OMR.TEST_NO = '1610615'
CONNECT BY LEVEL <= REGEXP_COUNT(SCORE_DETAIL, ',') + 1
AND TEST_NO = PRIOR TEST_NO
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL ) M1
LEFT JOIN (
SELECT
T2.EXAM_COURSE_ID
,T2.QUESTIONS_ID
,T2.QUESTIONS_NAME
,T2.SERIAL_NO
,T2.ANSWERS
,ROW_NUMBER() OVER(PARTITION BY EXAM_COURSE_ID ORDER BY SERIAL_NO ASC) ROW_INDEX
FROM T_TPL_OBJECTIVE_QUESTIONS T2
WHERE T2.EXAM_COURSE_ID = '3208075F3F8A4BD19032B41331A1C133' ) M2
ON M1.EXAM_COURSE_ID = M2.EXAM_COURSE_ID AND M1.ROW_INDEX = M2.ROW_INDEX
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。