一列中两个值的SQL计数

时间:2018-10-24 10:35:54

标签: sql sql-server tsql

我有一个带有客户名称和“状态”列的表。状态栏有两个值

Test
Live

客户不止一次出现,可以分为测试,实时或同时分类,如下所示:

**Customer |  Status**
Logistics | Test
Logistics | Live
Ample     | Live

我要查询的是给我同时属于两种状态的不同客户数量的计数。因此,使用上表,我将计算客户物流量(因为它既具有测试功能,又具有实时功能),但数量不多(因为它只是实时功能)。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您可以使用group by子句:

select Customer, count(*)
from table t
group by Customer
having min(status) <> max(status); 

如果您希望它具有特定的状态,请加入where子句:

select Customer, count(*)
from table t
where status in ('Test', 'Live')
group by Customer
having count(distinct status) = 2;

编辑::如果您也想要其他列,那么我更喜欢:

select t.*
from table t
where exists (select 1 from table t1 where t1.Customer = t.Customer and t1.status <> t.status);

答案 1 :(得分:1)

尝试这样的事情:

select customer 
from
    (select customer, max(IsTest) as IsTest , max(IsLive) as IsLive 
     from 
         (select customer, 
              case when status='test' then 1 else 0 end as IsTest,
              case when status='live' then 1 else 0 end as IsLive   
          from table) a
     group by customer) b
where IsTest = 1 and IsLive = 1

答案 2 :(得分:0)

您可以使用group by子句获取所需的输出。

选择客户,计数(*) 从表t 按客户分组 具有min(状态)<> max(状态);