환자 테이블이 있습니다. 환자는 독신이거나 기혼 일 수 있습니다. 모든 환자를 알파벳순으로 나열하고 싶지만 부부의 경우 여성 환자 만 표시하고 싶습니다 (남편 무시).
여러 명의 환자가 동일한 CaseNo를 가지고 있다면 부부라고 생각합니다.
성별 : 0은 여성, 1은 남성입니다.
PatientID CaseNo Gender Name
1 1 1 Mike
2 NULL 0 Pamela
3 2 0 Mary
4 2 1 John
5 NULL 1 Dave
예상 출력은 다음과 같습니다.
PatientID CaseNo Gender Name
5 NULL 1 Dave
3 2 0 Mary
1 1 1 Mike
2 NULL 0 Pamela
John은 그의 아내가 목록에 있기 때문에 제외됩니다.
이 질문에 대한 답변 중 하나를 시도했지만 CaseNo가 NULL 인 레코드는 제외됩니다.
WITH cte
AS (SELECT PatientID,
CaseNo,
Gender,
Name,
Row_number()
OVER (
partition BY CaseNo
ORDER BY Gender DESC) rn
FROM Patients)
SELECT PatientID,
CaseNo,
Gender,
Name
FROM cte
WHERE rn = 1
ORDER BY Name
이것을 달성 할 수 있습니까?
이 방법으로 시도 할 수 있습니다.
SELECT PatientID, CaseNo, Gender, Name
FROM
(
SELECT PatientID, CaseNo, Gender, Name,
ROW_NUMBER() OVER (PARTITION BY CaseNo ORDER BY Gender) rnum,
COUNT(*) OVER (PARTITION BY CaseNo) rcnt
FROM Patients
) q
WHERE CaseNo IS NULL
OR rcnt = 1
OR (rcnt > 1 AND rnum = 1)
ORDER BY Name
산출:
| 환자 | CASENO | 성별 | 이름 | | ----------- | -------- | -------- | -------- | | 5 | (null) | 1 | Dave | | 3 | 2 | 0 | Mary | | 1 | 1 | 1 | 마이크 | | 2 | (null) | 0 | 파멜라 |
다음은 SQLFiddle 데모입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다