Usuário com melhor resposta
Tratar uma coluna da mesma tabela duas vezes e apresentar como registro na mesma coluna.

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:
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:
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
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
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
-
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!
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 8 de janeiro de 2019 17:35