none
Como usar um SubSelect em duas Tabelas (Pai e Filho) e trazer o pai e todos os filhos um abaixo do outro RRS feed

  • 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.

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sexta-feira, 29 de maio de 2015 13:41

Respostas

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.idpnf

    drop table notafiscal;
    drop table produtonotafiscal;

    sexta-feira, 29 de maio de 2015 13:56
  • Deleted
    sexta-feira, 29 de maio de 2015 14:06
  • 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|


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sexta-feira, 29 de maio de 2015 14:19
  • 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
    sexta-feira, 29 de maio de 2015 14:36
  • 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.

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sexta-feira, 29 de maio de 2015 14:46
  • Com o cursor vai funcionar agora quanto a questão da performance creio que você tenha razão mas acho que será mais rápido que fazer no código C#.

    Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la

    sexta-feira, 29 de maio de 2015 14:55
  • 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
    sexta-feira, 29 de maio de 2015 15:05
  • 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!

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sexta-feira, 29 de maio de 2015 15:29