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 4441 게시물 읽기
No. 4441
여러테이블의 값을 join해서 하나의 칼럼으로 만들고 싶습니다.
작성자
이상재(hinayack)
작성일
2008-09-11 09:13
조회수
5,723

table [member] a

userid name type
aaa 길동이 똥차
bbb 희동이 세단



table[infor] b

userid name point
aaa 길동이 카드 100
bbb 희동이 카드 200
aaa 길동이 카드 두번째 300



결과 

a.userid a.name b.name b.point b.name b.poing
aaa 길동이 길동이 카드 100 길동이 카드 두번째 300


일단 요래 값을 뽑고 싶은데 제가 초보라 그런지 이렇게 뽑느게 가능한가요?

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

CREATE TABLE MEMBER (
 USERID VARCHAR(10)
 , NAME VARCHAR(10)
 , TYPE VARCHAR(10)
)
GO

CREATE TABLE INFOR (
 USERID VARCHAR(10)
 , NAME VARCHAR(20)
 , POINT INT
)
GO

INSERT INTO MEMBER
 SELECT 'AAA', '길동이', '똥차' UNION ALL
 SELECT 'BBB', '희동이', '세단'
GO
INSERT INTO INFOR
 SELECT 'AAA', '길동이 카드', 100 UNION ALL
 SELECT 'BBB', '희동이 카드', 200 UNION ALL
 SELECT 'AAA', '길동이 카드 두번째', 300
GO
SELECT * FROM MEMBER
SELECT * FROM INFOR

--RESULT
--USERID     NAME       TYPE
------------ ---------- ----------
--AAA        길동이        똥차
--BBB        희동이        세단
--
--(2 row(s) affected)
--
--USERID     NAME                 POINT
------------ -------------------- -----------
--AAA        길동이 카드               100
--BBB        희동이 카드               200
--AAA        길동이 카드 두번째           300
--
--(3 row(s) affected)

 

SELECT
 A.USERID
 , A.NAME
 , B.*
FROM
 MEMBER A
INNER JOIN
 (SELECT
  USERID
  , NAME1 = MAX(CASE WHEN RK = 1 THEN NAME END)
  , POINT1 = MAX(CASE WHEN RK = 1 THEN POINT END)
  , NAME2 = MAX(CASE WHEN RK = 2 THEN NAME END)
  , POINT2 = MAX(CASE WHEN RK = 2 THEN POINT END)
 FROM (
  SELECT
   *
   , RK = (SELECT COUNT(*) FROM INFOR Y WHERE X.USERID = Y.USERID AND X.NAME >= Y.NAME)
  FROM INFOR X
  ) Z
 GROUP BY USERID
 ) B
ON A.USERID = B.USERID

--RESULT
--USERID     NAME       USERID     NAME1                POINT1      NAME2                POINT2
------------ ---------- ---------- -------------------- ----------- -------------------- -----------
--AAA        길동이        AAA        길동이 카드               100         길동이 카드 두번째           300
--BBB        희동이        BBB        희동이 카드               200         NULL                 NULL
--Warning: Null value is eliminated by an aggregate or other SET operation.
--
--(2 row(s) affected)

이재웅(otooi)님이 2008-09-18 14:35에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4444windows xp pro에 sql server 2005 enterprise 설치방법?
김찬수
2008-09-16
5267
4443조회조건을 모두 row로 보고 싶은 경우? [1]
도옹
2008-09-12
4940
4442[ 질문 ] ms sql 2005 백업방법(전체 DB 백업후 HDD 포멧 후 복구 방법) [2]
김찬수
2008-09-11
7366
4441여러테이블의 값을 join해서 하나의 칼럼으로 만들고 싶습니다. [1]
이상재
2008-09-11
5723
4440sum()과 count()가 이상해용
황병득
2008-09-10
5457
4438눕혀서 출력해야하는데 어려워요. [2]
이상철
2008-09-09
6270
44370시 부터 24시의 쿼리 [1]
궁금이
2008-09-08
6187
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다