如何创建一个计算匹配项的Select查询

时间:2015-04-23 13:00:20

标签: sql ms-access

我有一个这样的Access表:

{{#each}}

现在我想只选择仅在Project3,Project4,Project5和NOT在Project1,Project2中的列nume_a2c中的值。查询结果应为:2,5

4 个答案:

答案 0 :(得分:1)

mysql方式:

http://sqlfiddle.com/#!9/496e61/29

SELECT DISTINCT t.nume_a2c
FROM table1 t

INNER JOIN (
  SELECT SUM(nume_proiect IN ('Proiect1', 'Proiect2')) as criteria,
  nume_a2c,
  SUM(IF(nume_proiect = 'Proiect3',1,0)) as p3,
  SUM(IF(nume_proiect = 'Proiect4',1,0)) as p4,
  SUM(IF(nume_proiect = 'Proiect5',1,0)) as p5

  FROM table1 
  GROUP BY nume_a2c
  ) t1
ON t.nume_a2c = t1.nume_a2c
  AND t1.criteria=0 
  AND t1.p3 > 0 AND t1.p4 > 0 AND t1.p5 > 0 

答案 1 :(得分:1)

    select DISTINCT nume_a2c        
from (
    SELECT nume_a2c,nume_proiect
    FROM table1
    WHERE nume_a2c IN
    (
    SELECT nume_a2c
    FROM table1
    where nume_proiect in ('Proiect3','Proiect4', 'Proiect5')
    )
    and nume_a2c not in
    (
    SELECT nume_a2c
    FROM table1
    where nume_proiect in ('Proiect1', 'Proiect2')
    )
    group by nume_a2c, nume_proiect ) as BB

    group by nume_a2c
    having count(nume_proiect) = 3 

    ;

这应该有效,您可以查看here

答案 2 :(得分:1)

你可能需要一些LEFT JOIN来获得Proiect3,4和5中的所有nume_a2c。

SELECT * FROM tableName t
LEFT JOIN tableName t1 ON t1.nume_a2c = t.nume_a2c
LEFT JOIN tableName t2 ON t2.nume_a2c = t.nume_a2c 
WHERE t.nume_proiect = 'Proiect3'
  and t1.nume_a2c is not null
  and t2.nume_a2c is not null 
  and t1.nume_proiect = 'Proiect4'
  and t2.nume_proiect = 'Proiect5'

答案 3 :(得分:1)

这已在Access 2010中测试过:

SELECT nume_a2c
FROM (SELECT DISTINCT nume_a2c, nume_proiect FROM table1)
WHERE 
    nume_proiect IN ('Proiect3','Proiect4','Proiect5')
    AND 
    nume_a2c NOT IN (
        SELECT nume_a2c
        FROM table1
        WHERE nume_proiect IN ('Proiect1','Proiect2')
    )
GROUP BY nume_a2c
HAVING COUNT(*) = 3