Inquiridor
Select pra retornar o numeral 1 ou zero dependendo da quantidade de vezes que um campo se repete,retornando 1 somente uma vez para cada grupo de registros

Pergunta
-
Prezados,
preciso de um select que retorne em uma coluna separada (CONTA_DOC) se um campo se repete ou não.
Nos casos em que for um registro apenas do campo ID_PROTOCOLO, o resultado será 1.
Nos casos em que tiver por exemplo, 2, 3, 4 registros ou mais, apenas um dos campos receberá 1 e os demais o numeral 0.
Não consegui pensar em nada.
O resultado no excel foi mais fácil, bastou usar um SE.
ID PROTOCOLO Conta DOC ID Projeto familia_id 5250 1 19076 19076 5235 1 19155 19154 5239 0 19395 19395 5239 1 15600 5600 5184 0 19270 19270 5184 0 19035 18898 5184 1 19033 18872 5184 0 19231 19231
Andreli G. Alves
Todas as Respostas
-
Boa tarde,
Experimente fazer uns testes com a função Row_Number mais ou menos dessa forma:
with CTE_RN as ( select *, row_number() over(partition by ID_PROTOCOLO order by ColunaOrdenacao desc) as RN from Tabela ) select *, case when RN = 1 then 1 else 0 end as CONTA_DOC from CTE_RN
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 25 de setembro de 2019 22:27
-
Andreli,
Verifique se este outro exemplo, utilizando a função de agregação Count() te ajuda:
Create Table Dados (ContaDoc Int, Validador Int, NumeroInicial Int, NumeroFinal Int) Go Insert Into Dados (ContaDoc, Validador, NumeroInicial, NumeroFinal) Values (5250, 1, 19076, 19076), (5235, 1, 19155, 19154), (5239, 0, 19395, 19395), (5239, 1, 15600, 5600), (5184, 0, 19270, 19270), (5184, 0, 19035, 18898), (5184, 1, 19033, 18872), (5184, 0, 19231, 1923) Go Select Case Count(ContaDoc) Over (Partition By ContaDoc Order By NumeroInicial, NumeroFinal) When 1 Then 1 When 2 Then 1 Else 0 End Contador From Dados Go
Select Case
When (Count(ContaDoc) In (1,2)) Then 1
Else 0
End As Contador
From Dados Group By ContaDoc
Go
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Editado Junior Galvão - MVPMVP quarta-feira, 25 de setembro de 2019 23:17
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 8 de outubro de 2019 13:00
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 8 de outubro de 2019 13:00
-
José,
Na situação em questão, o critério pra escolher se deve ser 0 ou 1 seria o seguinte:?
a) se tiver de 2 registros em diante, um deles deverá ser escolhido pra receber o numeral 1 na coluna Conta "DOC", os demais receberão zero.
b) se houver apenas um registro, ele receberá de cara o numeral 1.
Isso porque ID_protocolo refere-se ao mesmo documento que passa por diversos estágios, mais ainda é o mesmo documento, portanto deve ser contabilizado apenas uma vez e não 4 vezes (nos casos em que aparece 4 registros de ID_protocolo).
Andreli G. Alves
-