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 6385 게시물 읽기
No. 6385
쿼리 조언 부탁드립니다.
작성자
김종열(bongji123)
작성일
2012-06-18 16:10
조회수
7,807

 

 안녕하세요?  쿼리문 관련하여 조언을 구하고자 합니다.

교육신청 Table에 교육참석자 테이블이 있습니다.

교육참석자 컬럼은 보시는것과 같이 데이터가 들어 갑니다.

<USER><ITEM1>신청자</ITEM1><ITEM2>인사팀</ITEM2><ITEM3>20101001</ITEM3><ITEM4>과장</ITEM4><ITEM5>홍길동</ITEM5><ITEM6>인사팀장</ITEM6></USER><USER><ITEM1>신청자</ITEM1><ITEM2>홍보팀</ITEM2><ITEM3>20110429</ITEM3><ITEM4>사원</ITEM4><ITEM5>심청이</ITEM5><ITEM6>홍보담당</ITEM6></USER><USER><ITEM1>신청자</ITEM1><ITEM2>경리팀</ITEM2><ITEM3>20110105</ITEM3><ITEM4>주임</ITEM4><ITEM5>임꺽정</ITEM5><ITEM6>경리담당</ITEM6></USER><USER><ITEM1>신청자</ITEM1><ITEM2></ITEM2><ITEM3></ITEM3><ITEM4></ITEM4><ITEM5></ITEM5><ITEM6></ITEM6></USER><USER><ITEM1>신청자</ITEM1><ITEM2></ITEM2><ITEM3></ITEM3><ITEM4></ITEM4><ITEM5></ITEM5><ITEM6></ITEM6></USER>
 

데이터는 일정한 패턴을 가지고 있습니다.

<USER><ITEM1>신청자</ITEM1><ITEM2></ITEM2><ITEM3></ITEM3><ITEM4></ITEM4><ITEM5></ITEM5><ITEM6></ITEM6></USER><USER><ITEM1>신청자</ITEM1><ITEM2></ITEM2><ITEM3></ITEM3><ITEM4></ITEM4><ITEM5></ITEM5><ITEM6></ITEM6></USER><USER><ITEM1>신청자</ITEM1><ITEM2></ITEM2><ITEM3></ITEM3><ITEM4></ITEM4><ITEM5></ITEM5><ITEM6></ITEM6></USER><USER><ITEM1>신청자</ITEM1><ITEM2></ITEM2><ITEM3></ITEM3><ITEM4></ITEM4><ITEM5></ITEM5><ITEM6></ITEM6></USER><USER><ITEM1>신청자</ITEM1><ITEM2></ITEM2><ITEM3></ITEM3><ITEM4></ITEM4><ITEM5></ITEM5><ITEM6></ITEM6></USER>

제가 하고 싶은것은 아래와 같은 데이터를

사번 교육신청자 교육참석자 교육제목 교육목적 교육내용 시작일 종료일
20101001 홍길동 <USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2>인사팀</ITEM2>
        <ITEM3>20101001</ITEM3>
        <ITEM4>과장</ITEM4>
        <ITEM5>홍길동</ITEM5>
        <ITEM6>인사팀장</ITEM6>
        </USER>
        <USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2>홍보팀</ITEM2>
        <ITEM3>20110429</ITEM3>
        <ITEM4>사원</ITEM4>
        <ITEM5>심청이</ITEM5>
        <ITEM6>홍보담당</ITEM6>
        </USER>
        <USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2>경리팀</ITEM2>
        <ITEM3>20110105</ITEM3>
        <ITEM4>주임</ITEM4>
        <ITEM5>임꺽정</ITEM5>
        <ITEM6>경리담당</ITEM6>
        </USER>
        <USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2></ITEM2>
        <ITEM3></ITEM3>
        <ITEM4></ITEM4>
        <ITEM5></ITEM5>
        <ITEM6></ITEM6>
        </USER>
        <USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2></ITEM2>
        <ITEM3></ITEM3>
        <ITEM4></ITEM4>
        <ITEM5></ITEM5>
        <ITEM6></ITEM6>
        </USER>'
세상사는법 잘살아보세 잘먹고잘사는법 2012-06-18 2012-06-19

 

이런식으로 표현하고자 합니다.

사번 교육참석자 교육제목 교육목적 교육내용 시작일 종료일
20101001 홍길동 세상사는법 잘살아보세 잘먹고잘사는법 2012-06-18 2012-06-19
20110429 심청이 세상사는법 잘살아보세 잘먹고잘사는법 2012-06-18 2012-06-19
20110105 임꺽정 세상사는법 잘살아보세 잘먹고잘사는법 2012-06-18 2012-06-19

 

이렇게 표현하는게 가능할까요?

고수님들의 조언 부탁드립니다.

수고하세요.

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

 CREATE TABLE btbl (

[사번] CHAR(8)
, [교육신청자] NVARCHAR(50)
, [교육참석자] XML
, [교육제목] NVARCHAR(50)
, [교육목적] NVARCHAR(50)
, [교육내용] NVARCHAR(50)
, [시작일] DATE
, [종료일] DATE
)
;
 
INSERT INTO btbl( 
[사번]
, [교육신청자]
, [교육참석자]
, [교육제목]
, [교육목적]
, [교육내용]
, [시작일]
, [종료일]
)
SELECT '20101001'
, N'홍길동', N'<USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2>인사팀</ITEM2>
        <ITEM3>20101001</ITEM3>
        <ITEM4>과장</ITEM4>
        <ITEM5>홍길동</ITEM5>
        <ITEM6>인사팀장</ITEM6>
        </USER>
        <USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2>홍보팀</ITEM2>
        <ITEM3>20110429</ITEM3>
        <ITEM4>사원</ITEM4>
        <ITEM5>심청이</ITEM5>
        <ITEM6>홍보담당</ITEM6>
        </USER>
        <USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2>경리팀</ITEM2>
        <ITEM3>20110105</ITEM3>
        <ITEM4>주임</ITEM4>
        <ITEM5>임꺽정</ITEM5>
        <ITEM6>경리담당</ITEM6>
        </USER>
        <USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2></ITEM2>
        <ITEM3></ITEM3>
        <ITEM4></ITEM4>
        <ITEM5></ITEM5>
        <ITEM6></ITEM6>
        </USER>
        <USER>
        <ITEM1>신청자</ITEM1>
        <ITEM2></ITEM2>
        <ITEM3></ITEM3>
        <ITEM4></ITEM4>
        <ITEM5></ITEM5>
        <ITEM6></ITEM6>
        </USER>'
, '세상사는법'
, '잘살아보세'
, '잘먹고잘사는법'
, '2012-06-18'
, '2012-06-19'
;
 
SELECT 
tt.cc.value(N'(./ITEM3)[1]', N'CHAR(8)') AS 사번
, tt.cc.value(N'(./ITEM5)[1]', N'NVARCHAR(50)') AS 교육참석자 
, [교육제목]
, [교육목적]
, [교육내용]
, [시작일]
, [종료일]
FROM btbl 
CROSS APPLY [교육참석자].nodes( N'/USER' ) AS tt(cc)
WHERE LEN( tt.cc.value(N'(./ITEM3)[1]', N'CHAR(8)') ) > 0 AND LEN( tt.cc.value(N'(./ITEM5)[1]', N'NVARCHAR(50)') ) > 0
;
 
우욱님이 2012-06-18 23:18에 작성한 댓글입니다. Edit

우욱님 조언 감사합니다.

그런데 CROSS APPLY가 mssql 2000에서도 가능한건가요?

DB가 mssql2000입니다...

제가 Oracle만 사용을 해봐서... mssql은 생소하네요..

다시 한번 조언 부탁드립니다.

감사합니다.

김종열(bongji123)님이 2012-06-19 11:21에 작성한 댓글입니다.
이 댓글은 2012-06-19 11:33에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
6388시작번호, 끝번호 등록 프로시저 작성 [1]
정인수
2012-06-28
7363
6387쿼리 변경... [2]
짱가
2012-06-21
8181
6386시퀀스 문자열 증가 (A->B) [1]
초보
2012-06-20
8086
6385쿼리 조언 부탁드립니다. [2]
김종열
2012-06-18
7807
6383쿼리 질문입니다. [1]
정재훈
2012-06-08
7403
6382mssql 2000 에서 top [6]
노진광
2012-06-08
7718
6381MSSQL 2000 or MSSQL 2005 접속계정 패스워드 관리되는 파일, 레지 등등의 공간 [1]
최영호
2012-06-07
8428
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다