none
trazer registros com apenas uma flag RRS feed

  • Pergunta

  • tenho numa tabela com inúmeros produtos.

    um produto está cadastrado nessa tabela duas vezes. ou seja, possui duas linhas. o que diferencia é uma coluna, onde cada linha tem um valor (1 e 2).

    o outro produto está cadastrado apenas uma vez. ou seja, tem apenas 1 linha sendo que é flag é 1.

    eu preciso trazer dessa tabela, todos os produtos que possuem apenas 1 linha que tenha a flag igual a 1. Nesse exemplo não pode trazer o produto 1,
    pois ele possui dois valores na flag (independente de ter a flag1. é que ele tem outra flag). teria q trazer apenas o produto 2 que tem a flag igual 1.
    quinta-feira, 5 de maio de 2016 19:20

Respostas

Todas as Respostas

  • Boa tarde Rafa.

    Da pra fazer usando o comando abaixo:

    with qualquer_nome as(
    
    select produto, count (0) as qtde from [tabela] 
    group by produto
    having count (0)<2)
    
    select * from [tabela] where produto in(select produto from [qualquer_nome]) and flag =1


    Se for útil por favor classifique.

    Att




    quinta-feira, 5 de maio de 2016 20:01
  • Boa tarde,

    rafa-martin, experimente fazer uns testes mais ou menos dessa forma:

    select * from Tabela as t
    where
        t.Flag = 1 and
        not exists
            (select 1 from Tabela as s
             where 
                 s.IdProduto = t.IdProduto and
                 s.Flag <> 1)


    Espero que ajude


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

    quinta-feira, 5 de maio de 2016 20:12
  • não deu muito certo.

    vou dar um exemplo pra ficar melhor.

    eu tenho na tabela os seguintes produtos


    id    nome         flag
    1     produto x     1
    1     produto x     2
    2     produto z     1 
    2     produto z     1
    3     produto xx    1
    4     produto aaa   1
    4     produto aaa   1
    4     produto aaa   2

    tenho que fazer um select onde traga apenas os produtos que tenham na coluna flag o valor 1. 
    No entanto, os produto "x" e "aaa"  não pode retornar, pq eles possuem uma linha com a flag diferente de 1.

    então nesse caso deveria retornar apenas os produtos z e xx.
    sexta-feira, 6 de maio de 2016 14:13
  • não deu muito certo.

    vou dar um exemplo pra ficar melhor.

    eu tenho na tabela os seguintes produtos


    id    nome         flag
    1     produto x     1
    1     produto x     2
    2     produto z     1 
    2     produto z     1
    3     produto xx    1
    4     produto aaa   1
    4     produto aaa   1
    4     produto aaa   2

    tenho que fazer um select onde traga apenas os produtos que tenham na coluna flag o valor 1. 
    No entanto, os produto "x" e "aaa"  não pode retornar, pq eles possuem uma linha com a flag diferente de 1.

    então nesse caso deveria retornar apenas os produtos z e xx.

    Bom dia, não entendi muito bem o sentido de ter dois produtos com o mesmo id e o flag dos dois = 1

    2     produto z     1 
    2     produto z     1

    Os registros estão assim na sua tabela mesmo? 




    sexta-feira, 6 de maio de 2016 14:28
  • rafa-martin, experimente fazer uns testes com o script abaixo no SQL Server Management Studio:

    declare @Tabela table
    (id int, nome varchar(20), flag int);
    
    insert into @Tabela values
    (1, 'produto x', 1),
    (1, 'produto x', 2),
    (2, 'produto z', 1),
    (2, 'produto z', 1),
    (3, 'produto xx', 1),
    (4, 'produto aaa', 1),
    (4, 'produto aaa', 1),
    (4, 'produto aaa', 2);
    
    select distinct * from @Tabela as t
    where
        t.Flag = 1 and
        not exists
            (select 1 from @Tabela as s
             where 
                 s.Id = t.Id and
                 s.Flag <> 1)

    Espero que ajude


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

    sexta-feira, 6 de maio de 2016 14:35
  • na tabela tem mais colunas. então algumas outras informações são diferentes. por isso o mesmo produto com a mesma flag.

    eu só coloquei como exemplo.

    como seria o select?

    sexta-feira, 6 de maio de 2016 14:38
  • agora deu certo.

    obrigado.

    • Marcado como Resposta rafa-martin sexta-feira, 6 de maio de 2016 15:05
    sexta-feira, 6 de maio de 2016 15:05