Usuário com melhor resposta
Como usar um SubSelect em duas Tabelas (Pai e Filho) e trazer o pai e todos os filhos um abaixo do outro

Pergunta
-
Bom dia,
Qual seria a melhor forma para trazer a cada registro pai trazer todos os filhos, possui duas tabelas ligadas por id (Notas fiscais que estou criando), só que não consigo trazer os dados em hierarquia (Pai e filhos) um abaixo do outro.
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
Respostas
-
Pode ser feito utilizando um cursor ai é só ir inserindo em uma tabela temporária depois fazer o select na mesma.
Referencia:
https://msdn.microsoft.com/pt-br/library/ms180169.aspx?f=255&MSPPError=-2147217396
Da um pouco de trabalho mas é uma solução.
Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la
- Marcado como Resposta Mr. GMSOFT sexta-feira, 29 de maio de 2015 15:29
Todas as Respostas
-
Veja exemplo:
create table notafiscal (idnf int, nomecliente varchar(100))
insert notafiscal (idnf, nomecliente) values (1,'manoel'), (2,'joaquim'), (3,'maria')create table produtonotafiscal (idpnf int,idnf int , nomeprod varchar(100))
insert produtonotafiscal (idpnf,idnf , nomeprod) values (1,1,'arroz'), (2,1,'batata'), (3,1,'feijao');
insert produtonotafiscal (idpnf,idnf , nomeprod) values (4,2,'cenoura'), (5,2,'beterraba'), (6,2,'jilo');
insert produtonotafiscal (idpnf,idnf , nomeprod) values (7,3,'cenoura'), (8,3,'beterraba'), (9,3,'jilo');select a.idnf, a.nomecliente, B.idpnf, B.nomeprod
from notafiscal A inner join produtonotafiscal B on A.idnf = B.idnf
order by A.idnf, B.idpnfdrop table notafiscal;
drop table produtonotafiscal; -
-
Ja tentei dessa forma e esta saindo assim:
108|165|28140713510610000666550010000001651000062589|108|PNEU 205/55R16 ER300 109|166|28140713510610000666550010000001661000063680|109|PNEU 215/75R17.5 660 109|166|28140713510610000666550010000001661000063680|109|PNEU 215/75R17.5 M71 90|221|28140713510610000466550010000002211000061385|90 PNEU 205/75R16 DURAV 91|222|28140713510610000660550010000002221000061404|91 CHUMBO P/ BALANCEAME 91|222|28140713510610000660550010000002221000061404|91 PNEU 245/70R16 R620
E o que preciso é:
|PAI|1|0|5483|55|00|1|134879|29150405482271000666550010001348791173907863|29042015|29042015|8319,9|1|0|0|8319,9|2|0|0|0|0|0|0|0|0|0|0|0|0| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |PAI|1|0|5483|55|00|1|134879|29150405482271000666550010001348791173907863|29042015|29042015|8319,9|1|0|0|8319,9|2|0|0|0|0|0|0|0|0|0|0|0|0| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02| |FILHO|060|5655|0|8319,9|0|0|0|0|0|0|V02|
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
-
Pode ser feito utilizando um cursor ai é só ir inserindo em uma tabela temporária depois fazer o select na mesma.
Referencia:
https://msdn.microsoft.com/pt-br/library/ms180169.aspx?f=255&MSPPError=-2147217396
Da um pouco de trabalho mas é uma solução.
Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la
- Marcado como Resposta Mr. GMSOFT sexta-feira, 29 de maio de 2015 15:29
-
Era justamente o que não queria, por que quando importo para o banco o txt de 700mb e rodar o cursor creio que terei perda de performance drástica (Falo isso pois para gerar esse arquivo são 2 horas), pois são mais de 500 empresas no arquivo com mais de 500mil linhas.
Bom senão conseguir com o cursor faço com C# mesmo é p jeito.A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
-
-
já tentou usando union e concatenando as colunas... já que o intuito é enviar para um txt.
select NUM_NOTA & '|' & COD_FORNECEDOR & '|PAI' from NOTA_FISCAL UNION all SELECT NUM_NOTA & '|' & COD_PRODUTO & '|' & VLR_ITEM & '|' & QTD_ITEM & '|' & VLR_TOTAL & '|FIL' from NOTA_ITEM order by 1
Natan
- Editado 'Natan Silva sexta-feira, 29 de maio de 2015 15:06
-
Já e ele me traz os dois select em um unica linha e preciso que seja de forma hierárquica (Pai,Filhos).
Bom vou ver se o cursor vai servir, obrigado a todos!A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel