Este parece ser um problema que tenho com bastante frequência, mas ainda não descobri (não sou um dba). Estou executando uma consulta para um relatório que estou criando, mas o usuário não deseja que nenhuma linha duplicada seja exibida para o mesmo 'número do caso'.
Eu tentei "selecionar distinto" e "agrupar por", mas nenhum deles está mostrando os resultados como eu gostaria que fossem mostrados.
O problema é que o relatório consulta uma coluna que pode ter 2 valores possíveis diferentes, e queremos mostrar apenas os casos que correspondem a um desses valores, mas não queremos exibir um caso específico mais de 1 vez.
Aqui está a consulta:
SELECT cases.casenum,
sp_first_party(cases.casenum),
cases.matcode,
cases.open_status,
cases.date_opened,
cases.close_date
FROM cases,
insurance
WHERE (cases.casenum = insurance.case_num)
AND cases.date_opened >= :start
AND cases.date_opened <= :end
AND ( insurance.policy_type = 'Liability'
OR insurance.policy_type = 'SUM')
AND insurance.date_settled is Null
AND ( cases.matcode like 'GPI'
OR cases.matcode like 'MVA'
OR cases.matcode like 'S&F')
AND cases.close_date is not NULL
Isto é o que eu acredito ser a área do problema:
(insurance.policy_type = 'Liability' OR insurance.policy_type = 'SUM')
Um único "caso"/"número do caso" pode ter vários tipos de apólice de seguro... o que significa que eles podem ter responsabilidade ou SUM, ou ambos. E a saída do relatório está mostrando uma nova linha para cada instância de qualquer um desses tipos de seguro que aparecem.
Gostaríamos de mostrar apenas uma única linha por caso, independentemente de quantos/quais tipos de apólice de seguro são atribuídos ao caso... mas ainda mostrar apenas casos que correspondam a esse critério.
Eu tentei selecionar distinto, bem como agrupar por cases.casenum, o que estou fazendo de errado aqui?
Obrigado por ler!
PS- isso é para uma plataforma/aplicativo cms, mas é executado em t-sql (mesma sintaxe que mssql).
Aqui está um exemplo da saída - como você pode ver na coluna mais à esquerda, existem vários dos mesmos valores para a coluna "Número do caso". Isso ocorre porque existem vários seguros.policy_types diferentes para esse número de caso que atendem aos critérios. Embora ainda precisemos filtrar por esses tipos de política, não queremos ver uma linha extra para cada um.
Você não precisa usar
MIN
, apenas aROW_NUMBER
linha permitirá que você selecione uma linha por número de caso.Não consegui testar a seguinte consulta sem o modelo de dados: