DISTINCT em consulta

SQL

09/01/2023

Boa tarde galera, meu primeiro post aqui e espero que consiga a ajuda de vocês, tenho uma query a qual não estou conseguiu aplicar um distinct, segue ela:

select 
    UPPER(MES.DES_MES_ABR) + '/' + MES.DES_ANO AS MES_CONCLUSAO,
    ALO.ID_ATENDIMENTO,
    ALO.ID_PROTOCOLO,
    CONVERT(CHAR(6),ALO.DT_ATENDIMENTO,112) AS ANO_MES,
    CONVERT(VARCHAR(10),ALO.DT_ATENDIMENTO,103) AS DTA_ATENDIMENTO,
    ALO.TMP_ATENDIMENTO,
    ALO.FLAG_STATUS,
    ALO.DESC_CAMINHO,
    ALO.TP_SERVICO,
    COUNT (CASE WHEN ALO.TMP_ATENDIMENTO <= '1900-01-01 01:00:00' THEN 1 END) AS DENTRO_SLA,
    COUNT (CASE WHEN ALO.TMP_ATENDIMENTO > '1900-01-01 01:00:00' THEN 1 END) AS FORA_SLA
from dw.F_INDICADORES_ALO_COMERCIAL ALO
INNER JOIN dw.D_MES_MOVIMENTO MES ON CONVERT(CHAR(6),ALO.DT_ATENDIMENTO,112) = MES.COD_MES_MOVIMENTO
where (ALO.TP_SERVICO = 'Apoio Comercial'
OR ALO.TP_SERVICO = 'Assistente Comercial'
OR ALO.TP_SERVICO = 'Assistente Comercial - Apoio Back Administrativo'
OR ALO.TP_SERVICO = 'Apoio Comercial - Falhas na Boleta'
OR ALO.TP_SERVICO = 'Cadastro,  Formalização e Garantias'
OR ALO.TP_SERVICO = 'Back Cartões'
OR ALO.TP_SERVICO = 'Gerenciador de Cartões'
OR ALO.TP_SERVICO = 'Contato Ativo com Gerente') 
group by 
    ID_ATENDIMENTO, 
    ID_PROTOCOLO, 
    DT_ATENDIMENTO, 
    TMP_ATENDIMENTO,
    FLAG_STATUS, 
    DESC_CAMINHO, 
    TP_SERVICO,
    UPPER(MES.DES_MES_ABR) + '/' + MES.DES_ANO,
    MES.COD_MES_MOVIMENTO


Agradeço a ajuda!!!
Claudio Lague

Claudio Lague

Curtidas 0

Melhor post

Arthur Heinrich

Arthur Heinrich

09/01/2023

Tanto o distinct, quando o group by, tem por função agrupar valores.

No caso do distinct, o banco faz um sort no resultado e elimina as linhas repetidas.

No caso do group by, o banco faz o sort e, para cada tupla formada pelas colunas do agrupamento, ele retorna uma única linha, permitindo que outras colunas sejam agregadas, retornando por exemplo, a quantidade de linhas agrupadas, a soma de valores em outras colunas, ou o menor ou mais valor de determinada coluna, dentro do "grupo" de linhas que compartilham a mesma tupla do agrupamento.

Se você acrescenta uma coluna com alta granularidade, como uma PK ou outra coluna com muitos valores distintos, esta coluna acaba impedindo o agrupamento, visto que a cada linha retornada, esta coluna trás um valor distinto.

Tente descrever o que você espera retornar. Assim, poderemos sugerir uma maneira de chegar ao resultado esperado.
GOSTEI 1

Mais Respostas

Claudio Lague

Claudio Lague

09/01/2023

Boa tarde galera, meu primeiro post aqui e espero que consiga a ajuda de vocês, tenho uma query a qual não estou conseguiu aplicar um distinct, segue ela:

select 
    UPPER(MES.DES_MES_ABR) + '/' + MES.DES_ANO AS MES_CONCLUSAO,
    ALO.ID_ATENDIMENTO,
    ALO.ID_PROTOCOLO,
    CONVERT(CHAR(6),ALO.DT_ATENDIMENTO,112) AS ANO_MES,
    CONVERT(VARCHAR(10),ALO.DT_ATENDIMENTO,103) AS DTA_ATENDIMENTO,
    ALO.TMP_ATENDIMENTO,
    ALO.FLAG_STATUS,
    ALO.DESC_CAMINHO,
    ALO.TP_SERVICO,
    COUNT (CASE WHEN ALO.TMP_ATENDIMENTO <= '1900-01-01 01:00:00' THEN 1 END) AS DENTRO_SLA,
    COUNT (CASE WHEN ALO.TMP_ATENDIMENTO > '1900-01-01 01:00:00' THEN 1 END) AS FORA_SLA
from dw.F_INDICADORES_ALO_COMERCIAL ALO
INNER JOIN dw.D_MES_MOVIMENTO MES ON CONVERT(CHAR(6),ALO.DT_ATENDIMENTO,112) = MES.COD_MES_MOVIMENTO
where (ALO.TP_SERVICO = 'Apoio Comercial'
OR ALO.TP_SERVICO = 'Assistente Comercial'
OR ALO.TP_SERVICO = 'Assistente Comercial - Apoio Back Administrativo'
OR ALO.TP_SERVICO = 'Apoio Comercial - Falhas na Boleta'
OR ALO.TP_SERVICO = 'Cadastro,  Formalização e Garantias'
OR ALO.TP_SERVICO = 'Back Cartões'
OR ALO.TP_SERVICO = 'Gerenciador de Cartões'
OR ALO.TP_SERVICO = 'Contato Ativo com Gerente') 
group by 
    ID_ATENDIMENTO, 
    ID_PROTOCOLO, 
    DT_ATENDIMENTO, 
    TMP_ATENDIMENTO,
    FLAG_STATUS, 
    DESC_CAMINHO, 
    TP_SERVICO,
    UPPER(MES.DES_MES_ABR) + '/' + MES.DES_ANO,
    MES.COD_MES_MOVIMENTO


Agradeço a ajuda!!!



Ah, o distinct é pelo ID_PROTOCLO hehe
GOSTEI 0
POSTAR