2017-12-04 26 views
-3

Oracle에 익숙하지 않아 PL/SQL이 아닌 Oracle SQL에서 for 루프를 사용하는 것에 대해 알지 못합니다. 이 같은루핑 구분 기호 데이터 ORACLE 11g

I에게 질의를하고 실행 문 :

ID NAME DATE SALARY 
101 5A101 1004 12000 
101 5A101 1104 12000 
101 5A101 1204 12000 

어떻게에 대한 쿼리를 만들려면 어떻게해야합니까 : 나는 다음과 같은 결과가 필요

ID NAME DATE   SALARY 
101 5A101 100411041204 12000 

다음 데이터 한

그 결과는? 당신은 예를 들어 재귀 CTE를 사용할 수

+0

https://stackoverflow.com/help/mcve를 읽고보다 명확한 질문을 시도하십시오. –

+1

이것은 끔찍한 데이터 모델입니다. 한 번에 여러 값을 저장해서는 안됩니다. –

+0

예. 알고 있습니다.하지만 내 상사는이 예를 위해 저를 협박합니다. –

답변

0

이상한 데이터 구조를 무시하고는, 그것은 될 수

WITH test 
    AS (SELECT 101 id,'5A101' name,'100411041204' date1,12000 salary FROM DUAL UNION ALL 
     SELECT 1012 id,'5A102' name,'10041104' date1,12000 salary FROM DUAL) 
    SELECT DISTINCT id, 
        name, 
        SUBSTR (date1, (LEVEL - 1) * 4 + 1, 4) date1 
     FROM test 
CONNECT BY LEVEL <= LENGTH (date1)/4 
    ORDER BY id, name, date1 

여기서 날짜 열의 길이는 4의 배수가되어야합니다.

+0

yuppp는 길이가 4의 배수가됩니다 .. 감사합니다^_^ –

+0

선생님 .. "수하물 절차를 실행하고 .."내가 수있는 샘플을 저장 프로 시저 문제가 .. –

+0

나는 WITH 절을 데모 용으로 만 사용했습니다. 테스트 대신 데이터가있는 실제 테이블 이름을 사용할 수 있습니다. –

0

: 어쨌든 답변을 원하는 경우에

SQLFiddle Demo

with cte (id, name, date_, salary, dt, rn) as (
    select id, name, date_, salary, substr(date_, 1, 4), 1 from t 
    union all 
    select id, name, date_, salary, 
     substr(date_, rn * 4 + 1, 4), rn + 1 
    from cte where substr(date_, rn * 4 + 1, 4) is not null) 
select id, name, dt, salary from cte 
    order by id, rn 
+0

고마워요 ...^_ ^이 해결 –