안녕하세요.
현재, DB 관련 업무를 맡고 있는 초보자 입니다.
다름이 아니라, 서브쿼리 관련되어 쿼리작성 과 구현이 어려워 질문좀 드리려 합니다.
* OLYUNI라는 유니폼을 가져간 ([ACRPAR].[nAssigned] = '1' ,[ACRPAR].[nDelivered] ='1' ) 인
PARPGG라는 유니폼을 가져간, [ACRPAR].[nAssigned] = '1' ,[ACRPAR].[nDelivered] ='1' )
결국 OLYUNI랑 PARPGG를 둘 다 가져간사람들의 RegistereNum을 뽑고 싶은 쿼리 입니다. 작업하던게 머릿속에서 떠나지가 않아 머릿속에 있던 쿼리를 구현한거라.. 정확하지 않을 수 있지만, 도와주시면 정말 감사하겠습니다ㅠㅠ
1.UNIPIT 안에 OLYUNI랑 PARPGG라는 키트정보를 담고 있습니다.
2. 'OLYUNI'랑 'PARPGG' 값을 가지고 있는 사람 들 중에
3. OLYUNI 에 해당하는 [ACRPAR].[nAssigned] = '1' ,[ACRPAR].[nDelivered] = '1' 을 동시에 충족하는 사람
4. 그리고, 3번 조건을 충족시키면서도 'PARPGG' 에도 해당되고, [ACRPAR].[nAssigned] = '1' ,[ACRPAR].[nDelivered] = '1' 인 사람의 목록을 뽑으려 합니다.
SELECT [UNIPIT].[nRegNum] ,[UNIPIT].[nUniKit] ,[ACRPAR].[nAssigned] ,[ACRPAR].[nDelivered] ,[UNIPIT_PAR].[nRegNum] ,[UNIPIT_PAR].[nUniKit] ,[UNIPIT_PAR].[nAssigned] ,[UNIPIT_PAR].[nDelivered] FROM [MEV].[UNIFORM] AS UNIPIT INNER JOIN [MEV].[PartiINFO] AS ACRPAR ON [ACRPAR].[nRegNum] = [UNIPIT].[nRegNum] INNER JOIN ( SELECT [UNIPIT].[nRegNum] ,[UNIPIT].[nUniKit] ,[ACRPAR].[nAssigned] ,[ACRPAR].[nDelivered] ,[UNIPIT].[nRegNum] ,[UNIPIT].[nUniKit] ,[UNIPIT].[nAssigned] ,[UNIPIT].[nDelivered] FROM [MEV].[UNIFORM] AS UNIPIT INNER JOIN [MEV].[PartiINFO] AS ACRPAR ON [ACRPAR].[nRegNum] = [UNIPIT].[nRegNum] ) AS UNIPIT_PAR ON [UNIPIT].[nRegNum] = [UNIPIT_PAR].[nRegNum] WHERE [UNIPIT].[nUniKit] = 'OLYUNI' AND [UNIPIT].[nAssigned] = '1' AND [UNIPIT].[nDelivered] = '1' AND [UNIPIT_PAR].[nUniKit] = 'PARPGG' AND [UNIPIT_PAR].[nAssigned] = '1' AND [UNIPIT_PAR].[nDelivered] = '1'
그 값들은 이미 내가 알고 있는 고정값인데? 왜 조회가 필요하죠?
- nUniKit IN ('OLYUNI', 'PARPGG')
- nAssigned = '1'
- nDelivered = '1'
굳이 하고자 한다면 할 수는 있으나... 왜 해야 하는지 모르겠네요?
SELECT a.nRegNum , 'OLYUNI' nUniKit_1 , 'PARPGG' nUniKit_2 , '1' nAssigned , '1' nDelivered FROM mev.Uniform a INNER JOIN mev.PartiInfo b ON a.nRegNum = b.nRegNum WHERE a.nUniKit IN ('OLYUNI', 'PARPGG') AND b.nAssigned = '1' AND b.nDelivered = '1' GROUP BY a.nRegNum HAVING COUNT(DISTINCT a.nUniKit) = 2 ; SELECT a.nRegNum , MIN(a.nUniKit ) nUniKit_1 , MAX(a.nUniKit ) nUniKit_2 , MIN(b.nAssigned ) nAssigned , MIN(b.nDelivered) nDelivered FROM mev.Uniform a INNER JOIN mev.PartiInfo b ON a.nRegNum = b.nRegNum WHERE a.nUniKit IN ('OLYUNI', 'PARPGG') AND b.nAssigned = '1' AND b.nDelivered = '1' GROUP BY a.nRegNum HAVING COUNT(DISTINCT a.nUniKit) = 2 ;