我正在寻找一个SQL查询来选择所有ACTIVITY值为'SPORT'且不重复NAME值的值。
表格:
ID NAME ACTIVITY
1 Sam Sport
2 Sam Music
3 Alex Sport
4 Peter Reading
5 Rex Painting
示例:仅通过一项活动(SPORT)搜索姓名。结果必须是这样的:
3 Alex SPORT
注意:SAM不在结果中,因为他具有SPORT和Music这两个活动名称,但是Alex仅具有Sport的一项活动。我正在使用excel。
我已经尝试过此代码,但是它返回Sam和Alex。
SELECT [ID], [Name], [Activity]
FROM [TABLE$]
WHERE [ACTIVITY] = 'SPORT'
GROUP BY [ID], [NAME], [Activity]
HAVING COUNT ([Name]) = 1))
如果结果中不需要[ID]
列,则:
SELECT [Name], MAX([Activity])
FROM [TABLE$]
GROUP BY [NAME]
HAVING MIN([ACTIVITY]) = 'SPORT' AND MAX([ACTIVITY]) = 'SPORT'
如果要整行:
SELECT t.*
FROM [TABLE$] AS t
WHERE t.[ACTIVITY] = 'SPORT'
AND NOT EXISTS (
SELECT 1 FROM [TABLE$]
WHERE [NAME] = t.[NAME] AND [ACTIVITY] <> t.[ACTIVITY]
)