문제
다음 SQL 쿼리가 있다고 가정 해 봅시다.
SELECT Meeting.id AS meetingId, Bill.id AS billId
FROM Meeting
LEFT JOIN Bill ON Meeting.FK_BillId = Bill.id
다음을 출력합니다.
meetingId | billId
------------------
a | NULL
b | NULL
c | 1
d | 1
e | 1
f | 2
g | 2
그리고 나는 다음과 같은 출력을 원합니다.
meetingId | billId
------------------
a | NULL
b | NULL
c | 1
f | 2
어떻게 달성 할 수 있습니까? 그건 그렇고, 나는 그룹화 된 결과의 모호한 회의에 걱정하지 않습니다.
당신의 도움을 주셔서 감사합니다!
해결책
~ 안에 SQL Server
:
SELECT meetingId, billid
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY billId ORDER BY meetingID) AS rn,
m.*
FROM mytable m
) q
WHERE rn = 1 OR billid IS NULL
ANSI
:
SELECT MIN(meetingId), billid
FROM mytable
WHERE billid IS NOT NULL
GROUP BY
billId
UNION ALL
SELECT meetingId, billId
FROM mytable
WHERE billid IS NULL
MySQL
:
SELECT meetingId, billid
FROM mytable
WHERE billid IS NOT NULL
GROUP BY
billId
UNION ALL
SELECT meetingId, billId
FROM mytable
WHERE billid IS NULL
이것은보다 효율적인 사소한 일입니다 MIN
당신이 정말로 무엇을 신경 쓰지 않는다면 meetingID
올바른 그룹에 속하는 한 반환됩니다.
다른 팁
당신은 2 쿼리를 조합 할 수 있으며, 그 중 하나는 널이 아닌 항목으로 그룹을 수행하고 다른 하나는 널을 얻는 것입니다.
제휴하지 않습니다 StackOverflow