특정컬럼만 합치기? 0 4 2,074

by 열심열심 [2018.08.03 15:16:45]


 

 

안녕하세요. 예전에 특정 컬럼만 중복 제거된 쿼리를 본  듯 한데 제 착각인가요 함수 다찾아봐도 안나오네요..

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
by 예술은길다 [2018.08.03 16:21:38]
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 

 


by 열심열심 [2018.08.06 08:43:49]

감사합니다. 


by 마농 [2018.08.06 07:37:57]

보여 주신것과 같은 엑셀의 셀병합 같은 기능은 없습니다.
셀병합이 아닌 첫행만 보여주고 나머지 행은 빈값을 출력하는 것은 가능하겠지요.
위 예와 같이 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


by 열심열심 [2018.08.06 08:44:50]

decode에 함수도 가능하군요. 감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입