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 4314 게시물 읽기
No. 4314
SELECT 쿼리 질문입니다. 부탁드려요.
작성자
산호세달밤(hwanmo)
작성일
2008-07-04 19:06
조회수
5,684

합격자 테이블

----------------------------------------------

회원번호               이름                시험종류

----------------------------------------------

123456                땡칠이                   IIS

234567                송영구                   KKB

345678                나도야                   INS

456789                망나니                   NFH

234567                송영구                   IIS

567890                김구라                   OLI

123456                땡칠이                   INS

678901                김국진                   ZZX

234567                송영구                   KNF

234567                송영구                   INS

789012                양칠국                   RBY

890123                지상렬                   ERT

123456                땡칠이                   NFS

901234                희동이                   HDY

234567                송영구                   NFS

012345                고길동                   KGD

345678                나도야                   IIS

----------------------------------------------


다음과 같은 테이블이 있을때 시험종류 중 (IIS, INS, NFS) 세개 모두 합격한 사람을 찾는 쿼리문은 어떻게 되는지 궁금합니다.


결과는 다음과 같이 나와야 합니다.


123456                땡칠이

234567                송영구

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

기본 sql로 작성하겠습니다.

 

select 회원번호, 이름 from 테이블이름

where 이름 =

(

select 이름 from 테이블이름

where 시험종류 = 'IIS'

)

AND

이름 =

(

select 이름 from 테이블이름

where 시험종류 = 'NFS'

)

AND

이름 =

(

select 이름 from 테이블이름

where 시험종류 = 'INS'

)

 

실제로 해보지 않았지만

 

대충 이렇게 입니다.

 

그럼

김병석(byung82)님이 2008-07-06 13:49에 작성한 댓글입니다.

 

with tmp as

(

        select m_no = 123456  , nm = '땡칠이',  tType ='IIS'  union all

        select m_no = 234567  , nm = '송영구',  tType ='KKB'  union all

        select m_no = 345678  , nm = '나도야',  tType ='INS'  union all

        select m_no = 456789  , nm = '망나니',  tType ='NFH'  union all

        select m_no = 234567  , nm = '송영구',  tType ='IIS'  union all

        select m_no = 567890  , nm = '김구라',  tType ='OLI'  union all

        select m_no = 123456  , nm = '땡칠이',  tType ='INS'  union all

        select m_no = 678901  , nm = '김국진',  tType ='ZZX'  union all

        select m_no = 234567  , nm = '송영구',  tType ='KNF'  union all

        select m_no = 234567  , nm = '송영구',  tType ='INS'  union all

        select m_no = 789012  , nm = '양칠국',  tType ='RBY'  union all

        select m_no = 890123  , nm = '지상렬',  tType ='ERT'  union all

        select m_no = 123456  , nm = '땡칠이',  tType ='NFS'  union all

        select m_no = 901234  , nm = '희동이',  tType ='HDY'  union all

        select m_no = 234567  , nm = '송영구',  tType ='NFS'  union all

        select m_no = 012345  , nm = '고길동',  tType ='KGD'  union all

        select m_no = 345678  , nm = '나도야',  tType ='IIS' 

)

select 

        m_no, nm

from

        tmp

group by

        m_no, nm

having

        sum(case when tType = 'IIS' then 1

                              when tTYpe = 'INS' then 1

                              when tTYpe = 'NFS' then 1

                              else 0 end ) = 3

여리님이 2008-07-07 16:42에 작성한 댓글입니다. Edit

with tmp as
(
        select m_no = 123456  , nm = '땡칠이',  tType ='IIS'  union all
        select m_no = 234567  , nm = '송영구',  tType ='KKB'  union all
        select m_no = 345678  , nm = '나도야',  tType ='INS'  union all
        select m_no = 456789  , nm = '망나니',  tType ='NFH'  union all
        select m_no = 234567  , nm = '송영구',  tType ='IIS'  union all
        select m_no = 567890  , nm = '김구라',  tType ='OLI'  union all
        select m_no = 123456  , nm = '땡칠이',  tType ='INS'  union all
        select m_no = 678901  , nm = '김국진',  tType ='ZZX'  union all
        select m_no = 234567  , nm = '송영구',  tType ='KNF'  union all
        select m_no = 234567  , nm = '송영구',  tType ='INS'  union all
        select m_no = 789012  , nm = '양칠국',  tType ='RBY'  union all
        select m_no = 890123  , nm = '지상렬',  tType ='ERT'  union all
        select m_no = 123456  , nm = '땡칠이',  tType ='NFS'  union all
        select m_no = 901234  , nm = '희동이',  tType ='HDY'  union all
        select m_no = 234567  , nm = '송영구',  tType ='NFS'  union all
        select m_no = 012345  , nm = '고길동',  tType ='KGD'  union all
        select m_no = 345678  , nm = '나도야',  tType ='IIS' 
)

select
 m_no
from
 (
 select 
   m_no, tType
 from
   tmp
 where 
   tType in ('iis','ins','nfs')
 group by
   m_no, tType
 ) a
group by m_no
having count(*) = 3

여리님의 글에는 iis 가 3개 있어도 합격이라고 나올듯 해서 다시 한번 생각해 보았습니다. 수고하세요

.님이 2008-07-08 15:03에 작성한 댓글입니다. Edit

친절한 답변 감사드립니다.

산호세달밤(hwanmo)님이 2008-07-10 15:37에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4319쿼리 질문 드립니다. [2]
김영윤
2008-07-07
5199
4316깨진 mdf 복원시 에러가 나옵니다.
free
2008-07-05
5314
4315[질문] 주기적으로 일정 table에 업데이트를 하려고 하는데.. [2]
임현묵
2008-07-05
5150
4314SELECT 쿼리 질문입니다. 부탁드려요. [4]
산호세달밤
2008-07-04
5684
4313필드명을 한글로 하면 문제 없는지요 [1]
김길동
2008-07-03
4505
4312SQL 서버에서는 Command입력을 어떻게 해요? [2]
레오
2008-07-03
4681
4311언어가 한글로 셋팅된 DB에서 영문으로 요일을 받아올수 없나요?! [3]
손님
2008-07-03
5627
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다