none
Tratar uma coluna da mesma tabela duas vezes e apresentar como registro na mesma coluna. RRS feed

  • Pergunta

  • Boa tarde Prezados,

    Estou desenvolvendo um relatório com alguns padrões necessários, não irei me aprofundar sobre os padrões para a consulta, mas fato é que "consegui" fazer uma Query com os requisitos necessários através de concatenação, que ficou assim: 


        SELECT 
    '0101010' + STUFF('000000000000000', 14-len(P.CODIGO_PESSOA), 14, P.CODIGO_PESSOA) + '    02'+STUFF('                                                  ',1,len(P.NOME), P.NOME) +'0701'+

        '

        0201010' + STUFF('000000000000000', 14-len(P.CODIGO_PESSOA), 14, 
        P.CODIGO_PESSOA)  + '    0200103'+ @DT_ATUAL +'0933333'

        From bd.PESSOAS P

        Where P.CODIGO_PESSOA <> ''

        order by 
    P.NOME

    Este relatório precisa ser exportado para um arquivo TXT e o resultado do banco de dados fica perfeito, pois apresenta as informações exatamente como preciso, necessitando apenas "copiar" para o TXT:

    Resultado_Consulta


    O problema ocorre pois como fiz através de concatenação, obviamente, o resultado das "duas linhas" (estou considerando o resultado após a quebra de linha como outra linha) estão no mesmo registro.

    Quando levo esta Query para o report de nosso sistema, que só nos permite realizar a exportação de relatórios para o EXCEL fazendo com que ao copiar os dados da planilha exportada para um TXT, perde-se a quebra de linha, já que foi inserida através de "formatação".

    O resultado que necessito é que a linha antes da quebra (+'0701'+

    ') seja um registro e a linha após a quebra seja outro registro, tudo na mesma "coluna", desta forma:

    ResultadoDesejado

    Isso é possível?

    Desde já agradeço imensamente a atenção de todos.


    • Editado otaviinn segunda-feira, 7 de janeiro de 2019 14:54 Título
    segunda-feira, 7 de janeiro de 2019 14:54

Respostas

  • Boa tarde,

    Experimente fazer uns testes com a query abaixo para ver se é obtido o resultado esperado:

    SELECT 
        ca.Coluna
    From bd.PESSOAS P
    cross apply
    (
        select 
            '0101010' + 
            STUFF('000000000000000', 14-len(P.CODIGO_PESSOA), 14, P.CODIGO_PESSOA) + 
            '    02' +
            STUFF('                                                  ',1,len(P.NOME), P.NOME) +
            '0701' as Coluna
    
        union all
    
        select 
            '0201010' + 
            STUFF('000000000000000', 14-len(P.CODIGO_PESSOA), 14, P.CODIGO_PESSOA)  + 
            '    0200103' + 
            @DT_ATUAL +
            '0933333' 
    ) as ca
    Where 
        P.CODIGO_PESSOA <> ''
    order 
        by P.NOME
    

    Espero que ajude


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

    • Marcado como Resposta otaviinn terça-feira, 8 de janeiro de 2019 16:26
    segunda-feira, 7 de janeiro de 2019 16:28

Todas as Respostas

  • Boa tarde,

    Experimente fazer uns testes com a query abaixo para ver se é obtido o resultado esperado:

    SELECT 
        ca.Coluna
    From bd.PESSOAS P
    cross apply
    (
        select 
            '0101010' + 
            STUFF('000000000000000', 14-len(P.CODIGO_PESSOA), 14, P.CODIGO_PESSOA) + 
            '    02' +
            STUFF('                                                  ',1,len(P.NOME), P.NOME) +
            '0701' as Coluna
    
        union all
    
        select 
            '0201010' + 
            STUFF('000000000000000', 14-len(P.CODIGO_PESSOA), 14, P.CODIGO_PESSOA)  + 
            '    0200103' + 
            @DT_ATUAL +
            '0933333' 
    ) as ca
    Where 
        P.CODIGO_PESSOA <> ''
    order 
        by P.NOME
    

    Espero que ajude


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

    • Marcado como Resposta otaviinn terça-feira, 8 de janeiro de 2019 16:26
    segunda-feira, 7 de janeiro de 2019 16:28
  • Encontrei uma solução mais elegante:

    ;WITH PESSOAS AS 
    (
        SELECT 'Aaron John Doe' AS NOME,   '112' AS CODIGO_PESSOA UNION ALL
        SELECT 'Abigail Jane Doe' AS NOME, '222' AS CODIGO_PESSOA
    ),
    RELATORIO AS
    (
        SELECT ROW_NUMBER() OVER (ORDER BY P.NOME, P.CODIGO_PESSOA) AS ROW_ID, 
                    '0101010' + RIGHT(REPLICATE('0', 15) + P.CODIGO_PESSOA, 15) + '    02' + LEFT(P.NOME + REPLICATE(' ', 50), 50) + '0701' AS REGISTO
          FROM PESSOAS P
         WHERE P.CODIGO_PESSOA <> ''
    
        UNION ALL
    
        SELECT ROW_NUMBER() OVER (ORDER BY P.NOME, P.CODIGO_PESSOA) AS ROW_ID, 
                    '0201010' + RIGHT(REPLICATE('0', 15) + P.CODIGO_PESSOA, 15) + '    0200103' + @DT_ATUAL + '0933333'
          FROM PESSOAS P
         WHERE P.CODIGO_PESSOA <> ''
    )
    SELECT REGISTO
      FROM RELATORIO
     ORDER BY ROW_ID, REGISTO

    Porém a sua também funcionou! Muito obrigado!

    terça-feira, 8 de janeiro de 2019 16:27