database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7141 게시물 읽기
No. 7141
중복된 튜플을 찾아 그 행의 다른 컬럼에 복사하기
작성자
leedors(leedors527)
작성일
2018-10-01 23:13:41
조회수
67

어떤 테이블에 a b c 라는 컬럼이 있고 c에는 널값이 있는 것도 있고 없는 것도 있습니다.

예를 들어

테이블 test

a  b  c

=====

1 a null

2 b null

3 c null

4 a 100

5 b 200

=====

라는 테이블이 있을때

 

b 컬럼을 기준으로 중복된 행을 찾아 그 행의 null값이 들어있는 c 컬럼에 중복된 컬럼의 데이터를 넣어주려고 합니다. 그러니까 결과로 나오는 것이 

 

 

 

a b c

=====

1 a 100

2 b 200

3 c null

4 a 100

5 b 200

=====

 

이 되게 하려고 하는데 이중 sql을 써야하는 건지 어떻게 해야할지 도통 감을 잡기 어려운데 어떻게 하면 좋을지...많은 고수분들께서 봐주셨으면 합니다.

 

감사합니다.

이 글에 대한 댓글이 총 2건 있습니다.
with t as (
	select 1 as a, 'a' as b, null as c 
	union all
	select 2 as a, 'b' as b, null as c 
	union all
	select 3 as a, 'c' as b, null as c 
	union all
	select 4 as a, 'a' as b, 100 as c 
	union all
	select 5 as a, 'b' as b, 200 as c 
)
select t.a, t.b, isnull(t.c, t3.c)
from t
left join ( 
		select *
		from (
			select b, c, ROW_NUMBER() over(partition by b order by a) r
			from t
			where c is not null
		) t2
		where r=1
) t3 on t3.b=t.b

위 소스처럼
셀프 조인을 이용하시면 됩니다.
row_number를 쓴것은 b컬럼에 'a' 값이 여러개 들어가는 것을 가정해
c컬럼에 not null인 것중 a컬럼 값이 가장 작은 것으로 채우기 위해서
쿼리가 좀 복잡해 졌네요.

박인호(paerae)님이 2018-10-02 11:31:22에 작성한 댓글입니다.

SELECT a
     , b
     , ISNULL(c, MIN(c) OVER(PARTITION BY b)) c
  FROM t
 ORDER BY a
;

마농(manon94)님이 2018-10-04 10:49:12에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7144insert문 질문 드립니다. [3]
박상진
2018-10-18
23
7143트리거에서 OPENQUERY 실행 문제
수서기
2018-10-05
45
7142MSSQL 암호화 관련 질문입니다.
유닉스
2018-10-04
48
7141중복된 튜플을 찾아 그 행의 다른 컬럼에 복사하기 [2]
leedors
2018-10-01
67
7139오라클 변경 관련
권기혁
2018-09-17
99
7138반복적으로 사용되는 문장을 줄이고 싶어요...
Twins
2018-09-12
97
7137동영상 db저장
eLEEL
2018-09-06
118
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2018 DSN, All rights reserved.
작업시간: 0.071초, 이곳 서비스는
	PostgreSQL v10.4로 자료를 관리합니다