在一列中搜索具有相同值但在另一列中具有不同值的记录

时间:2014-12-16 20:06:38

标签: sql sql-server-2008 select count distinct

为我非常暧昧的标题道歉,但我一直在努力工作一天中的大部分时间而且无法到达任何地方所以我可能会蒙上阴影..让我提供样本数据并解释我的意思试图做:

+------+------+
| 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”值。非常感谢您提前帮助我。

2 个答案:

答案 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 byhaving来获取符合条件的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子句对它可以支持的条件类型非常一般。