我有一个表格:
test_name | test_result
-----------------------
test1 | pass
test2 | fail
test1 | pass
test1 | pass
test2 | pass
test1 | pass
test3 | pass
test3 | fail
test3 | pass
Run Code Online (Sandbox Code Playgroud)
正如你可以看到所有test1的传递,而test2和test3的传递都失败了.
是否有一个SQL语句可用于返回仅传递的测试的不同名称?例如test1
您可以按test_name进行分组,计算传递次数,并检查它是否与组中的行数相同.
SELECT test_name
FROM table1
GROUP BY test_name
HAVING SUM(test_result = 'pass') = COUNT(*)
Run Code Online (Sandbox Code Playgroud)
或者,计算失败次数并检查它是否为零:
SELECT test_name
FROM table1
GROUP BY test_name
HAVING SUM(test_result = 'fail') = 0
Run Code Online (Sandbox Code Playgroud)
结果:
test1
Run Code Online (Sandbox Code Playgroud)
测试数据:
CREATE TABLE table1 (test_name NVARCHAR(100) NOT NULL, test_result NVARCHAR(100) NOT NULL);
INSERT INTO table1 (test_name, test_result) VALUES
('test1', 'pass'),
('test2', 'fail'),
('test1', 'pass'),
('test1', 'pass'),
('test2', 'pass'),
('test1', 'pass'),
('test3', 'pass'),
('test3', 'fail'),
('test3', 'pass');
Run Code Online (Sandbox Code Playgroud)