Estou tentando descobrir uma maneira de contar um ID uma vez quando vários critérios são atendidos em uma coluna e, ao mesmo tempo, exibir um total dos mesmos critérios em outra coluna. Os critérios da primeira coluna podem ser usados mais de uma vez para o mesmo ID, mas precisam ser contados apenas uma vez. Existem 2 valores subGrp diferentes (1 e 2), mas focaremos apenas em um. Aqui estão os dados de exemplo para as 2 tabelas que estou usando:
create table vendor (
subGrp char(1),
subID varchar(10),
subStatus char(1),
subCat char(1) );
insert into vendor (
subGrp, subID, subStatus, subCat)
values ('1','101','A','E'),
('1','105','A','F'),
('1','127','A','F'),
('1','132','A','F'),
('1','133','D','F'),
('1','154','A','F'),
('1','162','A','F'),
('1','167','W','E'),
('1','178','A','F'),
('1','196','A','F'),
('1','200','A','E'),
('1','205','A','F'),
('1','230','A','F'),
('1','231','A','F'),
('1','237','A','F'),
('1','259','A','F'),
('1','260','A','F'),
('1','271','A','F');
create table customer (
cusID varchar(10),
prodType char(1) );
insert into customer (
cusID, prodType
values ('101','Y'),
('105','H'),
('105','Y'),
('127','H'),
('132','H'),
('132','Y'),
('132','Y'),
('132','F'),
('132','Y'),
('133','H'),
('133','S'),
('154','H'),
('154','Y'),
('154','Y'),
('154','Y'),
('154','Y'),
('162','H'),
('162','Y'),
('162','Y'),
('167','J'),
('178','H'),
('196','H'),
('200','Y'),
('205','H'),
('205','Y'),
('230','H'),
('230','Y'),
('230','Y'),
('230','Y'),
('230','Y'),
('231','H'),
('237','H'),
('259','H'),
('259','Y'),
('260','H'),
('271','H');
O subGrp estará na primeira coluna. Na próxima coluna, preciso contar quantos cusIDs têm um prodType Y, F ou J, embora tenham um subStatus de A e subCat de F. Os únicos valores usados várias vezes são encontrados em prodType.
Quero os seguintes resultados:
subGrp | prodTypeTotal | subGrpTotal |
---|---|---|
1 | 7 | 14 |
Portanto, no subGrp 1, existem 7 IDs contados apenas uma vez se o ID contiver qualquer combinação de Y, F ou J, e tendo um total de 14 IDs que possuem um subStatus A e um subCat F.
É um aplicativo e banco de dados de terceiros, então estou um pouco limitado no que posso fazer (ex: gera erro ao usar distinto: função escalar não encontrada). Eles me disseram que é MS SQL.
Além disso, não tenho certeza sobre os tipos de dados, pois não tenho conhecimento disso, mas é isso que estou assumindo. Espero que isso faça sentido. Desde já, obrigado.
Comece juntando as tabelas, com os filtros corretos instalados
vendors
.Parece que você precisa agrupar
subGrp
ecusID
verificar os valores Y, F, J e, em seguida, agrupar novamente parasubGrp
obter os totais.Você pode usar uma condicional
MIN
para obter apenas 1 ou nulo para cada umcusID
que tenha qualquer um desses três valores.banco de dados<> violino