안녕하세요. 예전에 특정 컬럼만 중복 제거된 쿼리를 본 듯 한데 제 착각인가요 함수 다찾아봐도 안나오네요..
with t(A,B,C,D,E) as (
select 1, 'A',DBMS_RANDOM.STRING('A', 5), 'AAA',100 FROM DUAL UNION ALL
select 2, 'A',DBMS_RANDOM.STRING('A', 5), 'BBB',200 FROM DUAL UNION ALL
select 3, 'A',DBMS_RANDOM.STRING('A', 5), 'CCC',300 FROM DUAL UNION ALL
select 1, 'B',DBMS_RANDOM.STRING('A', 5), 'AAA',100 FROM DUAL UNION ALL
select 2, 'B',DBMS_RANDOM.STRING('A', 5), 'BBB',200 FROM DUAL UNION ALL
select 3, 'B',DBMS_RANDOM.STRING('A', 5), 'CCC',300 FROM DUAL)
SELECT * FROM T ;
1 | A | uYaBJ | AAA | 100 |
2 | A | VpROG | BBB | 200 |
3 | A | ygwae | CCC | 300 |
1 | B | emOlw | AAA | 100 |
2 | B | xmcoL | BBB | 200 |
3 | B | qFsLO | CCC | 300 |
원하는 값
1 | A | uYaBJ | AAA | 100 |
2 | VpROG | BBB | 200 | |
3 | ygwae | CCC | 300 | |
1 | B | emOlw | AAA | 100 |
2 | xmcoL | BBB | 200 | |
3 | qFsLO | CCC | 300 |
WITH T(A,b,C,D,E) AS ( SELECT 1, 'A',dbms_random.STRING('A', 5), 'AAA',100 FROM dual UNION ALL SELECT 2, 'A',dbms_random.STRING('A', 5), 'BBB',200 FROM dual UNION ALL SELECT 3, 'A',dbms_random.STRING('A', 5), 'CCC',300 FROM dual UNION ALL SELECT 1, 'B',dbms_random.STRING('A', 5), 'AAA',100 FROM dual UNION ALL SELECT 2, 'B',dbms_random.STRING('A', 5), 'BBB',200 FROM dual UNION ALL SELECT 3, 'B',dbms_random.STRING('A', 5), 'CCC',300 FROM dual) SELECT A, B, CASE WHEN LAG(B) OVER(ORDER BY B) = B THEN NULL ELSE B END B_LAG, C, D, E FROM T
보여 주신것과 같은 엑셀의 셀병합 같은 기능은 없습니다.
셀병합이 아닌 첫행만 보여주고 나머지 행은 빈값을 출력하는 것은 가능하겠지요.
위 예와 같이 A 컬럼의 값에 1이 반드시 들어온다면?
A 가 1일 때만 보여주는 방법도 있겠구요. DECODE(a, 1, b) AS b
1 없이 2로 시작하는 경우도 있을 수 있다면?
LAG 나 ROW_NUMBER 함수를 이용해 표현하는 것이 가능합니다.
DECODE(ROW_NUMBER() OVER(PARTITION BY b ORDER BY a), 1, b) AS b
DECODE(LAG(b) OVER(ORDER BY b, a), b, '', b) AS b