Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leonardo Oliveira Leal

Consulta com detalhe

Recommended Posts

Pessoal,

Preciso de uma grande ajuda!

 

Tenho duas tabelas, uma com notas fiscais e a outra com os títulos pertencentes às notas fiscais.

 

Preciso de criar uma consulta unindo os títulos às notas fiscais que faça o seguinte:

 

Nota Fiscal 1

Título 1 da Nota Fiscal 1

Nota Fiscal 2

Título 1 da Nota Fiscal 2

Título 2 da Nota Fiscal 2

Nota Fiscal 3

Título 1 da Nota Fiscal 3

Nota Fiscal 4

Título 1 da Nota Fiscal 4

Título 2 da Nota Fiscal 4

Título 3 da Nota Fiscal 4

...

 

Acontece que com INNER JOIN, CROSS JOIN, Procedures, Views etc só consigo no máximo listar da seguinte maneira:

 

Nota Fiscal 1

Título 1 da Nota Fiscal 1

Nota Fiscal 2

Título 1 da Nota Fiscal 2

Nota Fiscal 2

Título 2 da Nota Fiscal 2

Nota Fiscal 3

Título 1 da Nota Fiscal 3

Nota Fiscal 4

Título 1 da Nota Fiscal 4

Nota Fiscal 4

Título 2 da Nota Fiscal 4

Nota Fiscal 4

Título 3 da Nota Fiscal 4

 

Se alguém tiver uma idéia de como fazer isso agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o exemplo de query que esta fazendo e a estrutura correta, assim fica mais fácil de lhe ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O tipo de quebra que você quer não é tratado na query, deve ser tratado na camada da aplicação que exibe seu resultado, um gerador de relatórios por exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Vou exporta o resultado desta consulta para um arquivo TXT e estou fazendo alguns testes com procedures pois nela poderia de alguma maneira gerar loops que me permitissem criar essa quebra. Para o meu caso fazer este trabalho em um gerador de relatórios não é interessante por não foi assim que me pediram...

 

 

Ibrahim Brumate,

 

Seguem os códigos.

 

Listas Notas Fiscais:

SELECT CONCAT(CAST(n.id AS CHAR(6)),',','S',',','000000',',','0-0',',','""',',','S100',',','""',',',LPAD(CAST(n.valor_total_bruto as char),16,' '),',',LPAD('0.00',16,' '),',','N',',','1')

FROM nota_fiscal as n

WHERE n.empresa = "001"

AND n.dt_emissao = "2011-09-26";

 

 

Listas os Títulos das Notas Fiscais:

SELECT CONCAT(CAST(t.id AS CHAR(6)),',','E',',','E700',',',LPAD(CAST(t.valor as char),16,' '),',',DATE_FORMAT(t.vencimento,'%d/%m/%y'),',','""',',','""',',','""',',','""',',','""',',','""',',','""',',','""',',','0-0',',','N')

FROM nota_fiscal_titulo AS t, nota_fiscal AS n2

WHERE t.empresa = "001"

AND t.empresa = n2.empresa

AND t.id = n2.id

AND n2.dt_emissao = "2011-09-26";

 

 

 

Obrigado pela atenção de vocês!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leonardo, faltou a estrutura da base com dados para testar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui ainda terminar a procedure mas acho que estou no caminho com o código abaixo. O que acham?

 

DELIMITER |

 

DROP PROCEDURE IF EXISTS teste |

 

CREATE PROCEDURE teste()

 

BEGIN

 

DECLARE idMaster, idSlave, indexM, indexS INT DEFAULT 0;

DECLARE nota TEXT;

DECLARE titulo TEXT;

 

DECLARE masterCursor CURSOR FOR SELECT CONCAT(CAST(n.id AS CHAR(6)),',','S',',','000000',',','0-0',',','""',',','S100',',','""',',',LPAD(CAST(n.valor_total_bruto as char),16,' '),',',LPAD('0.00',16,' '),',','N',',','1')

FROM nota_fiscal AS n

WHERE n.dt_emissao = "2011-19-26"

AND n.empresa = "001";

 

DECLARE slaveCursor CURSOR FOR SELECT CONCAT(CAST(t.id AS CHAR(6)),',','E',',','E700',',',LPAD(CAST(t.valor as char),16,' '),',',DATE_FORMAT(t.vencimento,'%d/%m/%y'),',','""',',','""',',','""',',','""',',','""',',','""',',','""',',','""',',','0-0',',','N')

FROM nota_fiscal_titulo t INNER JOIN nota_fiscal AS n2

ON t.empresa = n2.empresa AND t.id = n2.id

WHERE t.empresa = "001"

AND n2.dt_emissao = "2011-19-26";

 

OPEN masterCursor;

 

SET idMaster = (SELECT COUNT(CONCAT(CAST(n.id AS CHAR(6)),',','S',',','000000',',','0-0',',','""',',','S100',',','""',',',LPAD(CAST(n.valor_total_bruto as char),16,' '),',',LPAD('0.00',16,' '),',','N',',','1'))

FROM nota_fiscal AS n

WHERE n.dt_emissao = "2011-19-26"

AND n.empresa = "001");

 

WHILE indexM<idMaster DO

 

FETCH masterCursor INTO nota;

 

SELECT nota;

 

OPEN slaveCursor;

 

SET idSlave = (SELECT COUNT(CONCAT(CAST(t.id AS CHAR(6)),',','E',',','E700',',',LPAD(CAST(t.valor as char),16,' '),',',DATE_FORMAT(t.vencimento,'%d/%m/%y'),',','""',',','""',',','""',',','""',',','""',',','""',',','""',',','""',',','0-0',',','N'))

FROM nota_fiscal_titulo t INNER JOIN nota_fiscal AS n2

ON t.empresa = n2.empresa AND t.id = n2.id

WHERE t.empresa = "001"

AND n2.dt_emissao = "2011-19-26");

 

WHILE indexS < idSlave DO

 

FETCH slaveCursor INTO titulo;

 

SET @codmat2 = titulo;

 

SELECT titulo;

 

SET indexS = indexS + 1;

 

END WHILE;

 

CLOSE slaveCursor;

 

SET indexM = indexM + 1;

 

 

END WHILE;

 

CLOSE masterCursor;

 

END |

 

DELIMITER ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.