SQL - 多个寄存器条件查询

时间:2013-03-08 15:15:47

标签: sql ms-access

我有以下表结构:

ID       COMPANY       PROJECT      ACTIVITY     TYPE
1        A             1            A1.1         NORMAL
2        A             1            A1.2         NORMAL
3        A             1            A1.3         NORMAL
4        A             2            A2.1         DUMMY
5        A             2            A2.2         DUMMY
6        A             2            A2.3         DUMMY
7        A             3            A3.1         NORMAL
8        A             3            A3.2         DUMMY
9        A             3            A3.3         NORMAL

我的目标是检索公司和项目,其中所有活动(在组合公司x项目中)都是假人。

我在下面编写了SQL:

SELECT COMPANY, PROJECT
FROM TABLE
GROUP BY COMPANY, PROJECT
HAVING TYPE = 'DUMMY'

然而,它不仅带来了A公司和2号项目(这是唯一满足我条件的项目),还有公司3项目3(只有一种DUMMY类型)。

你们能帮我修一下这个陈述吗?

感谢!!!!

2 个答案:

答案 0 :(得分:3)

你接近成功。利用MAXMIN函数。

SELECT  COMPANY, PROJECT
FROM    TABLE
GROUP   BY COMPANY, PROJECT
HAVING  MAX(TYPE) = MIN(TYPE) AND
        MAX(TYPE) = 'DUMMY'

答案 1 :(得分:0)

您可以使用EXISTS语句来获得您正在寻找的答案:

SELECT DISTINCT COMPANY, PROJECT
FROM TABLE t
WHERE EXISTS (
  SELECT 1
  FROM TABLE tDummy
  WHERE tDummy.COMPANY = t.COMPANY
  AND tDummy.PROJECT = t.PROJECT
  AND tDummy.[TYPE] = 'DUMMY')
AND NOT EXISTS (
  SELECT 1
  FROM TABLE tNotDummy
  WHERE tNotDummy.COMPANY = t.COMPANY
  AND tNotDummy.PROJECT = t.PROJECT
  AND (
    tNotDummy.[TYPE] <> 'Dummy'
    OR tNotDummy.[TYPE] IS NULL));

这假设如果TYPE为空,则不将其视为“DUMMY”。