假设我有以下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

我想要以下输出,即billId的组不是NULL:

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

如果您真的不关心 meetingID 将返回什么,只要它属于正确的组,这比 MIN 更有效。

其他提示

你可以联合2个查询,其中一个查询在非空条目中执行,另一个查询获取空查询。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top