我有以下表结构:
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类型)。
你们能帮我修一下这个陈述吗?
感谢!!!!
答案 0 :(得分:3)
你接近成功。利用MAX
和MIN
函数。
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”。