所有比赛并且其中至少一个不匹配
所有记录中的考试成绩表返回记录,其中1个== PASS和0 == FAIL所有比赛并且其中至少一个不匹配
ID Name Test Result
--------------------
1 John MATH 1
2 John ENGL 1
3 Mary MATH 1
4 Mary PSYC 0
编辑:假设名字是唯一的。
我需要获得所有记录谁
1)通过了所有测试
2)失败的人至少有一个测试
所以,第一个查询应返回约翰和他的所有记录,以及第二个查询应该返回Mary和她的所有记录(包括具有PASS的记录)。
我试图做一个LEFT OUTER JOIN
本身和比较计数,但似乎没有得到一个工作查询。
SELECT * FROM Results R1
LEFT OUTER JOIN Results R2 on R1.ID=R2.ID and R2.Result=1
WHERE ??? count of rows from R1 is compared to count of non-null rows from R2
这是一个 “海报孩子” 演习为EXISTS
条款:
在leasr一个失败的结果:
select * from Results r
where exists (select * from Results rr where rr.Name=r.Name AND Result=0)
一切都过去了:
select * from Results r
where not exists (select * from Results rr where rr.Name=r.Name AND Result=0)
看到这些查询的工作在你的数据集at sqlfiddle.com
上。
一种方式
Select Name,
Case failCount When 0 then 'X' Else '' End PassedAll,
Case failCount When 0 then '' Else 'X' End FailedOneOrMore
From (Select name,
Sum(Case Result when 0 Then 1 Else 0 End) failCount
From Results R
Group By Name) Z
把所有的记录,刚刚加入这个
Select zz.Name, zz.PassedAll, zz.FailedOneOrMore,
r.Test, r.Result
From (Select Name,
Case failCount When 0 then 'X' Else '' End PassedAll,
Case failCount When 0 then '' Else 'X' End FailedOneOrMore
From (Select name,
Sum(Case Result when 0 Then 1 Else 0 End) failCount
From Results R
Group By Name) Z) ZZ
Left Join Results r On r.Name = zz.Name
这是一个不错的选择,但它仅返回一个或多个结果失败 – kateroh 2012-08-17 18:23:28
ahhh是,编辑为正确 – 2012-08-17 18:37:09
一切都过去了
SELECT Name FROM Results R1
GROUP BY NAME
HAVING SUM(RESULT) = COUNT(RESULT)
一些失败
SELECT Name FROM Results R1
GROUP BY NAME
HAVING SUM(RESULT) < COUNT(RESULT)
希望它可以帮助
编辑
一切都过去了
SELECT Name FROM Results R1
GROUP BY NAME
HAVING SUM(1-RESULT) = 0
一些失败
SELECT Name FROM Results R1
GROUP BY NAME
HAVING SUM(1-RESULT) > 0
(这可能运行得更快)
此查询使用子查询返回所有记录(通过&失败)对谁已通过测试的至少一个人:
select * from Results where Name in (select Name from Results where Result = '1' group by Name);
结果中排除那些谁没有通过任何测试。
这对于通过所有测试的情况无效,因为玛丽会在两个查询中返回 – 2012-08-17 18:06:37
@JustinPihony不,因为'EXISTS'前面的'NOT',她不会被包括在“全部通过”结果中。请参阅[sqlfiddle](http://sqlfiddle.com/#!3/2a4c4/5)的链接。 – dasblinkenlight 2012-08-17 18:14:22
当你的名字加入时你是对的,但是改变它以脱离ID是错误的。 http://sqlfiddle.com/#!3/d8b08/2 – 2012-08-17 18:16:34