2011-07-06 128 views
0

我有这个表:MS访问SQL帮助

beneficiary  service marks term 
1    eng  50  1 
1    eng     2 
1    math  30  1 
1    math  20  2 
1    com     1 
1    com  70  2 
2    com     1 
2    com  30  2 
2    eng  20  1 
2    eng  30  2 

我怎么能只提取的行,受益人/服务双有标记两个方面服务

所以从这个表应该只返回:

beneficiary  service mark  term 
1    math  30  1 
1    math  20  2 
2    eng  20  1 
2    eng  30  2 
+0

我不懂你的问题。 “在服务中这两个术语都有什么标志”是什么意思? – Flimzy

+0

如果你看第二张表,它应该是有意义的 – Ali

+0

而'服务'列对应于这些考试? – Flimzy

回答

3

这时候我将数据导入我的本地数据库,并运行它的工作原理:

SELECT s.* 
FROM scores AS s 
JOIN (
    SELECT beneficiary,service 
    FROM scores 
    WHERE marks IS NOT NULL 
    GROUP BY beneficiary,service HAVING COUNT(*) = 2 
) AS x ON (x.beneficiary = s.beneficiary AND x.service = s.service); 

输出:

beneficiary | service | marks | term 
-------------+---------+-------+------ 
      1 | math | 30 | 1 
      1 | math | 20 | 2 
      2 | eng  | 20 | 1 
      2 | eng  | 30 | 2 
(4 rows) 
+0

我们不能用做查询子吧, – Ali

+0

我几乎有它在我的脑海里,并且几乎可以肯定,我需要子查询做 – Ali

+0

这并不使用子查询... – Flimzy