none
Verdadeiro / Falso SQL RRS feed

  • Pergunta

  • Pessoal,

    Gostaria de saber se tem como fazer uma espécie de verdadeiro/falso em SQL igual como se faz no Excel...

    Nesta tabela são armazenados informações de NFs. da seguinte forma:

    NF: 001     Cod. Item: 300   Qtd:3

    NF: 001     Cod. Item: 301    Qtd:1

    NF: 001     Cod. Item: 305   Qtd:5

    NF: 002     Cod. Item: 310  Qtd:2

    NF: 002    Cod.Item: 300    Qtd:1

    Entao, a coluna "NF" pode ser duplicada, se uma mesma NF tem 3 itens, ele é armazenado no BD em 3 linhas... Quando esta base é extraida para o excel, o pessoal cria uma nova coluna e faz um verdadeiro/falso com o numero da NF... Eu queria automatizar isso, para já sair preenchido do banco... tem como fazer isso?

    Obrigado!


    []'s Jean Barros

    sexta-feira, 9 de março de 2012 13:06

Respostas

  • Jean

    Você pode fazer usando CTE e Row_number (para SQL 2005 ou superior)

    declare @tbTeste as table (nf char(3), cdItem int, qtd int)
    insert into @tbTeste values ('001',300,3),('001',301,1),('001',305,5),('002',310,2),('002',300,1)
    ;With cte_dados
    as
    (
    Select nf, cdItem, qtd, ROW_NUMBER() over (partition by nf order by nf,cdItem) contador from @tbTeste
    )
    select case when contador = 1 then nf else '' end as NF, cditem, qtd from cte_dados


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Marcado como Resposta Jean Barros sexta-feira, 9 de março de 2012 13:40
    sexta-feira, 9 de março de 2012 13:33
    Moderador

Todas as Respostas

  • Jean

    Você pode fazer usando CTE e Row_number (para SQL 2005 ou superior)

    declare @tbTeste as table (nf char(3), cdItem int, qtd int)
    insert into @tbTeste values ('001',300,3),('001',301,1),('001',305,5),('002',310,2),('002',300,1)
    ;With cte_dados
    as
    (
    Select nf, cdItem, qtd, ROW_NUMBER() over (partition by nf order by nf,cdItem) contador from @tbTeste
    )
    select case when contador = 1 then nf else '' end as NF, cditem, qtd from cte_dados


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Marcado como Resposta Jean Barros sexta-feira, 9 de março de 2012 13:40
    sexta-feira, 9 de março de 2012 13:33
    Moderador
  • Olá Jean,

    Veja se resolve teu problema

    create table teste12 (NF int, cod int, qtd int)

    insert into teste12 values (001,300,3) insert into teste12 values (001,301,1) insert into teste12 values (001,305,5) insert into teste12 values (002,310,2) insert into teste12 values (002,300,1) select nf, 'TRUEFALSE' = CASE WHEN sum(qtd) > 3 THEN 'VERDADEIRO' ELSE 'FALSO' END from teste12 group by nf

    Espero que ajude.

    Marque caso for útil, vlew.


    sexta-feira, 9 de março de 2012 13:40
  • Legal!

    Mas quando extrair a planilha, tem que vir todos os dados... mas com uma coluna nova escrito 'verdadeiro' ou 'falso' para que pelo filtro do excel os usuários possam escolher se querem ou não ver todos os itens da NF entendeu? Acho que teria que criar uma coluna nova na tabela que seria preenchido com 'verdadeiro' ou 'falso'...


    []'s Jean Barros

    sexta-feira, 9 de março de 2012 14:07