|appop
我想编写一个SQL查询来仅获取具有仅错误的a或b或同时包含a和b的记录
输出应为第2、3组,如
组2包含a和b,组3仅包含a。
除a,b之外的任何包含Error的组均不应返回。
答案 0 :(得分:2)
我将对不是a
或b
的错误进行分组并使用条件:
SELECT [group] -- Assuming MS SQL Syntax, like Ross Presser did in his answer
FROM mytable
GROUP BY [group]
HAVING COUNT(CASE WHEN [error] NOT IN ('a', 'b') THEN 1 END) = 0
答案 1 :(得分:1)
不确定DBMS,因此以下内容可能不适用,但是要使用相关子查询提供另一种选择:
SELECT DISTINCT a.Group
FROM Table1 a
WHERE NOT EXISTS (SELECT 1 FROM Table1 b WHERE a.Group = b.Group AND b.Error NOT IN ('a','b'))
或在包含至少一个错误代码不等于LEFT JOIN
或a
的网上论坛查询中使用b
:
SELECT DISTINCT a.Group
FROM
Table1 a LEFT JOIN
(
SELECT DISTINCT t.Group
FROM Table1 t
WHERE t.Error <> 'a' AND t.Error <> 'b'
) b
ON a.Group = b.Group
WHERE b.Group IS NULL
还有一个非常具体的您的示例,但这只是为了好玩-
SELECT t.Group
FROM Table1 t
GROUP BY t.Group
HAVING MIN(t.Error) >= 'a' AND MAX(t.Error) <= 'b'
在以上所有内容中,将Table1
替换为表名。