我有一个带有客户名称和“状态”列的表。状态栏有两个值
Test
Live
客户不止一次出现,可以分为测试,实时或同时分类,如下所示:
**Customer | Status**
Logistics | Test
Logistics | Live
Ample | Live
我要查询的是给我同时属于两种状态的不同客户数量的计数。因此,使用上表,我将计算客户物流量(因为它既具有测试功能,又具有实时功能),但数量不多(因为它只是实时功能)。
有什么想法吗?
答案 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(状态);