不确定您到底在寻找什么,有 2 个案例
当每个客户 = 1 时,获取所使用的总服务。
当它 = 1 时获取每项服务的客户数
通过以上内容,您可以尝试以下查询,但最好在问题中提供有关预期输出的更多信息。
对于第一种情况,您可以这样做
select
s.id_cliente,
sum(s1.ser1+s1.ser2+s1.ser3+s1.ser4) as tot_services
from services s
inner join
(
select
id_cliente,
case when serv_cuidpess = 1 then 1 else 0 end as ser1,
case when serv_ali = 1 then 1 else 0 end as ser2,
case when serv_hab = 1 then 1 else 0 end as ser3,
case when serv_roupa = 1 then 1 else 0 end as ser4
from services
)s1 on s1.id_cliente = s.id_cliente
group by s.id_cliente;
对于第二种情况,您可以这样做
select
serv1_client_count,
serv2_client_count,
serv3_client_count,
serv4_client_count
from services s
inner join
(
select
s1.id_cliente,
sum(s2.ser1) as serv1_client_count,
sum(s2.ser2) as serv2_client_count,
sum(s2.ser3) as serv3_client_count,
sum(s2.ser4) as serv4_client_count
from services s1
inner join
(
select
id_cliente,
case when serv_cuidpess = 1 then 1 else 0 end as ser1,
case when serv_ali = 1 then 1 else 0 end as ser2,
case when serv_hab = 1 then 1 else 0 end as ser3,
case when serv_roupa = 1 then 1 else 0 end as ser4
from services
)s2 on s2.id_cliente = s1.id_cliente
)t on t.id_cliente = s.id_cliente
DEMO
更新
来自评论
输出应该显示有多少有 1 服务而不是服务 1.. 如何
许多人有 2 项服务而不是 2 项服务
你可以这样做
select
sum(client_count) as client_count,
serv_count
from services s
inner join
(
select
s1.id_cliente,
1 as client_count,
sum(s2.ser1+s2.ser2+s2.ser3+s2.ser4) as serv_count
from services s1
inner join
(
select
id_cliente,
case when serv_cuidpess = 1 then 1 else 0 end as ser1,
case when serv_ali = 1 then 1 else 0 end as ser2,
case when serv_hab = 1 then 1 else 0 end as ser3,
case when serv_roupa = 1 then 1 else 0 end as ser4
from services
)s2 on s2.id_cliente = s1.id_cliente
group by s1.id_cliente
)t on t.id_cliente = s.id_cliente
group by serv_count
DEMO