为我非常暧昧的标题道歉,但我一直在努力工作一天中的大部分时间而且无法到达任何地方所以我可能会蒙上阴影..让我提供样本数据并解释我的意思试图做:
+------+------+
| ID | UW |
+------+------+
| 1 | I |
| 1 | I |
| 3 | I |
| 3 | I |
| 3 | C |
| 3 | C |
| 4 | C |
| 4 | C |
我正在尝试查找UW列中同时存在“I”和“C”的ID计数,因此在上面的示例中,计数将为:1(对于ID#3)。由于ID 1只有“I”而ID 4在“UW”字段中只有“C”值。非常感谢您提前帮助我。
答案 0 :(得分:3)
这是一种方式:
SELECT COUNT(DISTINCT A.ID) N
FROM dbo.YourTable A
WHERE EXISTS(SELECT 1 FROM dbo.YourTable
WHERE ID = A.ID
AND UW IN ('I','C'));
另一个:
SELECT COUNT(*)
FROM ( SELECT ID
FROM dbo.YourTable
WHERE UW IN ('I','C')
GROUP BY ID
HAVING COUNT(DISTINCT UW) = 2) A;
答案 1 :(得分:1)
您可以使用group by
和having
来获取符合条件的ID:
select id
from table t
group by id
having sum(case when uw = 'I' then 1 else 0 end) > 0 and
sum(case when uw = 'C' then 1 else 0 end) > 0;
然后您可以使用子查询来计算这些:
select count(*)
from (select id
from table t
group by id
having sum(case when uw = 'I' then 1 else 0 end) > 0 and
sum(case when uw = 'C' then 1 else 0 end) > 0
) t
我喜欢用这种方式表达这些问题,因为having
子句对它可以支持的条件类型非常一般。