문제

다음 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 쿼리를 조합 할 수 있으며, 그 중 하나는 널이 아닌 항목으로 그룹을 수행하고 다른 하나는 널을 얻는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top