none
Como concaterna o resultado de uma select em uma única linha ??????? RRS feed

  • Pergunta

  • Não sei se o assunto ficou claro, mas seria isso, imagine que eu tenho dados do cabeçalho da nota fiscal e também tenho os detalhes que são os itens dessa nota, o problema está no fato que eu tenho que mostrar também detalhes dos defeitos apresentados nessa nota e geralmente são mais de um na verdade vão ter vários defeitos.

     

    No meu relatorio eu não consigo mostrar mais de um detalhe, dai eu pensei em algo do tipo criar uma função que pudesse a cada registro de defeitos concatenar e retorna um unico registro.

     

    o meu select ficar algo assim:

     

    select notaifscal, codigo_item,

    (select top 1 (funcaoRetornoDefeitos(ukey_defeito) )) as defeitos

    from Nota

     

    o resultado seria :

    Nota          Item           Defeitos

    123456      ABC           Defeito 1, Defeito 2, Defeito 3, Defeito 4

    123456      ACD           NULL

     

    Não sei se conseguir deixar claro....

     

    Mas agradeço caso alguém puder ajudar,

     

    Att,

    Adriano

    quinta-feira, 9 de agosto de 2007 18:52

Respostas

  •  

    Olá Adriano,

     

    Veja este exemplo:

     

    Code Snippet

    create function funcaoRetornoDefeitos (@ukey_defeito int)

    returns varchar (500)

    as

    begin

    declare @ret varchar (500)

    select @ret = ''

    select @ret = @ret + Defeito + ', '

    from itensDefeito

    where ukey_defeito = @ukey_defeito

    return left (@ret, len (@ret) - 2)

    end

     

     

    Apenas adapte a sua situação.

     

     

    Abraço

    quinta-feira, 9 de agosto de 2007 19:00

Todas as Respostas

  •  

    Olá Adriano,

     

    Veja este exemplo:

     

    Code Snippet

    create function funcaoRetornoDefeitos (@ukey_defeito int)

    returns varchar (500)

    as

    begin

    declare @ret varchar (500)

    select @ret = ''

    select @ret = @ret + Defeito + ', '

    from itensDefeito

    where ukey_defeito = @ukey_defeito

    return left (@ret, len (@ret) - 2)

    end

     

     

    Apenas adapte a sua situação.

     

     

    Abraço

    quinta-feira, 9 de agosto de 2007 19:00
  • Grande Alexandre VM,

    Fiz a devida alteração e blz funcionou , e até já consegui usar dessa forma :

    SELECT DBO.FUNCAORETORNODEFEITOS('abcd')

     

    Num entendi como retornar em uma única linha todos os defeitos, no meu relatorio eu imaginei criar um único campo com 500 posições.

     

    Porque o que eu não quero é ter que ter vários uma coluna com vários defeitos, caso eu faça o join com a tabela de defeitos.

     

    Num sei se conseguir ser claro. :-<

     

    Caso tiver alguam idéias agradeço,

     

    Abs

     

    Adriano

     

     

    quinta-feira, 9 de agosto de 2007 21:20
  • Alexandre, consegui adpatar esse código da seguinte forma ao invés de passar a ukey do defeito,

    eu fiz o seguinte passei a ukey da nota fiscal, pois eu tenho essa informação, pois como disse essa nota tem vários defeitos, dai beleza funcionou como eu pretendia, graças ao teu código e a tua ajuda,

     

    Abraços,

     

    Adriano_SP

     

    sexta-feira, 10 de agosto de 2007 01:42
  •  

    Que bom Adriano!!

     

    Geralmente passamos exemplo genéricos, que precisam ser adaptados. Que bom que conseguiu usar perfeitamente.

     

     

    Grande abraço

    sexta-feira, 10 de agosto de 2007 04:42