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
운영게시판
최근게시물
DB2 Q&A 853 게시물 읽기
No. 853
1:n 인 테이블 쿼리 1줄로 리스트 만드는 쿼리 질문입니다.
작성자
쨔르(corea)
작성일
2005-10-17 16:50
조회수
6,158

a table

idx, title, name

b table

idx, filename, aidx


이렇게 들어갑니다.


내용은 a 테이블에 들어가고 파일은 b 테이블에 들어가는데요.

파일은 최대 3개까지 등록이 됩니다.


그러니까.

a 테이블에 row 하나 생기면 b 테이블은 row가 최대 3개 까지 생기게

되는..뭐 그런 관계인데요..


리스트를 뽑아 올려고 하는데.


left outer join 을 쓸경우

한줄이 아닌 3줄이 나오게 되죠.


그래서 이걸 한줄로 나오게 하고 싶은데요.


a.idx, a.title, a.name, filename1, filename2, filename3

이런식으로.

어떻게 쿼리늘 날려야 할까요..


요즘 쿼리때문에 또... 바보됐네요.

 

 

 

이 글에 대한 댓글이 총 2건 있습니다.

 

허접하지만 ..^^

 

create table a (
idx char(5), title varchar(20), name varchar(20));

create table b (
idx char(5), filename varchar(20), aidx varchar(20));

insert into a values('1', 'a1', 'a1_n');
insert into b values('1', 'a1_fn1', 'a1_fx1');
insert into b values('1', 'a1_fn2', 'a1_fx2');
insert into b values('1', 'a1_fn3', 'a1_fx3');

insert into a values('2', 'a2', 'a2_n');
insert into b values('2', 'a2_fn1', 'a2_fx1');
insert into b values('2', 'a2_fn2', 'a2_fx2');

 

SELECT IDX,TITLE,NAME,MAX(F1),MAX(F2),MAX(F3)
FROM
(SELECT IDX,TITLE,NAME,
       MAX(CASE WHEN RN=1 THEN FILENAME ELSE '' END) F1,
       MAX(CASE WHEN RN=2 THEN FILENAME ELSE '' END) F2,
       MAX(CASE WHEN RN=3 THEN FILENAME ELSE '' END) F3
FROM
(SELECT A.IDX,TITLE,NAME,FILENAME,RANK() OVER(PARTITION BY A.IDX ORDER BY FILENAME) RN
  FROM A A,B B
 WHERE A.IDX=B.IDX
) A
GROUP BY IDX,TITLE,NAME,FILENAME
) A
GROUP BY IDX,TITLE,NAME
;

 

 

마라도님이 2005-10-18 09:58에 작성한 댓글입니다. Edit

이렇게 하는건 어떨까요 ... ^^

select IDX,TITLE,NAME,max(f1),max(f2),max(f3)
FROM
(
SELECT IDX,TITLE,NAME,
       CASE WHEN RN=1 THEN FILENAME ELSE '' END F1,
       CASE WHEN RN=2 THEN FILENAME ELSE '' END F2,
       CASE WHEN RN=3 THEN FILENAME ELSE '' END F3
FROM
(SELECT A.IDX,TITLE,NAME,FILENAME,row_number() OVER(PARTITION BY A.IDX ORDER BY FILENAME) RN
  FROM A A,B B
 WHERE A.IDX=B.IDX
) A1
) A2

group by idx,title,name
;

matsya님이 2005-10-18 13:00에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
856김동주님 언제나 좋은 답글 감사합니다. [1]
db2man
2005-10-19
4733
855online backup에 대해 질문드립니다. [1]
db2man
2005-10-18
4967
854SQL2314W error for a big table RUNSTATS [1]
Hyung
2005-10-18
5925
8531:n 인 테이블 쿼리 1줄로 리스트 만드는 쿼리 질문입니다. [2]
쨔르
2005-10-17
6158
851decimal값을 변환하고 싶습니다. [1]
초보
2005-10-13
7001
850function 생성시~~ [2]
엉터리
2005-10-11
4992
849ALTER 문으로 NOT NULL로 변경 하려고합니다. [3]
장정연
2005-10-11
9467
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다