题
假设我有以下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个查询,其中一个查询在非空条目中执行,另一个查询获取空查询。
不隶属于 StackOverflow