我有以下表结构:
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(它只有一个虚拟类型)。
你们能帮我修改一下声明吗?
谢谢!
发布于 2013-03-08 23:17:21
你已经接近成功了。使用MAX和MIN函数。
SELECT COMPANY, PROJECT
FROM TABLE
GROUP BY COMPANY, PROJECT
HAVING MAX(TYPE) = MIN(TYPE) AND
MAX(TYPE) = 'DUMMY'发布于 2013-03-08 23:55:06
您可以使用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为null,您不会将其算作“DUMMY”。
https://stackoverflow.com/questions/15297216
复制相似问题