none
Consulta Retornando Sequencial por Status RRS feed

  • Pergunta

  • Tenho uma tabela com os campos PREFIXO NUMERO STATUS
    ex:
    AAA 1 Vendido
    AAA 2 Vendido
    AAA 3 Estoque
    AAA 4 Vendido
    CCA 1 Vendido
    CCA 2 Vendido
    CCA 3 Vendido
    CCA 4 Vendido
    CCA 5 Vendido
    CCA 6 Estoque

    Preciso que minha consulta retorne PREFIXO NUMERO_INICIAL NUMERO FINAL STATUS
    AAA 1 2 Vendido
    AAA 3 3 Estoque
    AAA 4 4 Vendido
    CCA 1 5 Vendido
    CCA 6 6 Estoque

    Estou apanhando do select q devo realizar, ou se é necessario criar uma view ou sp
    terça-feira, 18 de fevereiro de 2014 23:09

Respostas

  • Experimente fazer um teste com essa versão:

    declare @Tabela table
    (Prefixo varchar(10), Numero int, Status varchar(10));
    
    insert into @Tabela values
    ('AAA', 1, 'Vendido'),
    ('AAA', 2, 'Vendido'),
    ('AAA', 3, 'Estoque'),
    ('AAA', 4, 'Vendido'),
    ('AAA', 11, 'Vendido'),
    ('AAA', 12, 'Vendido'),
    ('CCA', 1, 'Vendido'),
    ('CCA', 2, 'Vendido'),
    ('CCA', 3, 'Vendido'),
    ('CCA', 4, 'Vendido'),
    ('CCA', 5, 'Vendido'),
    ('CCA', 6, 'Estoque'),
    ('CCA', 7, 'Vendido'),
    ('CCA', 8, 'Vendido');
    
    with CTE_RN as
    (
        select
            Prefixo,
            Numero,
            Status,
            ROW_NUMBER() OVER(PARTITION BY Prefixo, Status ORDER BY Numero) as RN
        from @Tabela
    )
    
    select 
        Prefixo,
        MIN(Numero) as Numero_Inicial,
        MAX(Numero) as Numero_Final,
        Status,
        Numero - RN as Grupo
    from CTE_RN
    group by
        Prefixo,
        Status,
        Numero - RN
    order by
        Prefixo,
        Numero_Inicial

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br


    quarta-feira, 19 de fevereiro de 2014 12:31

Todas as Respostas

  • Boa noite,

    Robertinho, pelo que entendi você pode agrupar os dados por Prefixo e Status:

    select
        Prefixo,
        min(Numero) as Numero_Inicial,
        max(Numero) as Numero_Final,
        Status
    from Tabela
    group by
        Prefixo,
        Status
    


    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 18 de fevereiro de 2014 23:17
  • Assim nao dá! Tenho q consistir se HAVING (MAX(NUM)-MIN(NUM)+1=COUNT(NUM)

    Pode ter serie

    AAA 1 Vendido 

    AAA 2 Vendido

    AAA 4 Vendido

    Tem q retornar

    AAA 1 2 Vendido

    AAA 4 4 Vendido

    Mas nem sempre retorna o correto, tenho q jogar o resultado em uma tabela temporaria e depois consistir se aquela numeracao ja esta na tb temporaria e isso q esta demorando. a tabela tem milhares de registros.

    terça-feira, 18 de fevereiro de 2014 23:25
  • Experimente fazer um teste com o script abaixo:

    declare @Tabela table
    (Prefixo varchar(10), Numero int, Status varchar(10));
    
    insert into @Tabela values
    ('AAA', 1, 'Vendido'),
    ('AAA', 2, 'Vendido'),
    ('AAA', 3, 'Estoque'),
    ('AAA', 4, 'Vendido'),
    ('CCA', 1, 'Vendido'),
    ('CCA', 2, 'Vendido'),
    ('CCA', 3, 'Vendido'),
    ('CCA', 4, 'Vendido'),
    ('CCA', 5, 'Vendido'),
    ('CCA', 6, 'Estoque');
    
    with CTE_Grupo as
    (
        select
            t.Prefixo,
            t.Numero,
            t.Status,
            t.Numero - coalesce(a.Numero, 0) as Grupo
        from @Tabela as t
        left join @Tabela as a
            on 
                a.Prefixo = t.Prefixo and
                a.Status = t.Status and
                a.Numero = t.Numero - 1
    )
    
    select 
        Prefixo,
        MIN(Numero) as Numero_Inicial,
        MAX(Numero) as Numero_Final,
        Status,
        Grupo
    from CTE_Grupo
    group by
        Prefixo,
        Status,
        Grupo
    order by
        Prefixo,
        Grupo

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 18 de fevereiro de 2014 23:43
  • Tambem não da!

    pega como exemplo o

    insert into @Tabela values
    ('AAA', 1, 'Vendido'),
    ('AAA', 2, 'Vendido'),
    ('AAA', 3, 'Estoque'),
    ('AAA', 4, 'Vendido'),
    ('AAA', 11, 'Vendido'),
    ('AAA', 12, 'Vendido');

    O AAA 1 2 e 12 ficam no mesmo grupo

    quarta-feira, 19 de fevereiro de 2014 01:32
  • Experimente fazer um teste com essa versão:

    declare @Tabela table
    (Prefixo varchar(10), Numero int, Status varchar(10));
    
    insert into @Tabela values
    ('AAA', 1, 'Vendido'),
    ('AAA', 2, 'Vendido'),
    ('AAA', 3, 'Estoque'),
    ('AAA', 4, 'Vendido'),
    ('AAA', 11, 'Vendido'),
    ('AAA', 12, 'Vendido'),
    ('CCA', 1, 'Vendido'),
    ('CCA', 2, 'Vendido'),
    ('CCA', 3, 'Vendido'),
    ('CCA', 4, 'Vendido'),
    ('CCA', 5, 'Vendido'),
    ('CCA', 6, 'Estoque'),
    ('CCA', 7, 'Vendido'),
    ('CCA', 8, 'Vendido');
    
    with CTE_RN as
    (
        select
            Prefixo,
            Numero,
            Status,
            ROW_NUMBER() OVER(PARTITION BY Prefixo, Status ORDER BY Numero) as RN
        from @Tabela
    )
    
    select 
        Prefixo,
        MIN(Numero) as Numero_Inicial,
        MAX(Numero) as Numero_Final,
        Status,
        Numero - RN as Grupo
    from CTE_RN
    group by
        Prefixo,
        Status,
        Numero - RN
    order by
        Prefixo,
        Numero_Inicial

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br


    quarta-feira, 19 de fevereiro de 2014 12:31