none
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 RRS feed

  • 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

    quarta-feira, 25 de setembro de 2019 20:37

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

    quarta-feira, 25 de setembro de 2019 20:49
  • 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]


    quarta-feira, 25 de setembro de 2019 23:09
  • Deleted
    quinta-feira, 26 de setembro de 2019 10:48
  • 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

    quinta-feira, 26 de setembro de 2019 12:37
  • Deleted
    quinta-feira, 26 de setembro de 2019 13:11