CONSULTA SQL

PAULOHSV 28/12/2009 16:12:16
#330585
Montei minha sql da seguinte forma
  SQL = [Ô]SELECT DISTINCT B.ID_INSUMO,A.COD_INSUMO,B.NOME_COMERCIAL, [Ô] & _
[Ô](Select Sum(QUANTIDADE)AS QI1 From REGISTRO_APLICACOES_INSUMO Where REGISTRO_APLICACOES_INSUMO.COD_INSUMO = B.ID_INSUMO AND C.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô] AND C.SAFRA=[Ô] & txtSafra1.Value & [Ô]) as SAFRA1, [Ô] & _
[Ô](Select Sum(QUANTIDADE)AS QI2 From REGISTRO_APLICACOES_INSUMO Where REGISTRO_APLICACOES_INSUMO.COD_INSUMO = B.ID_INSUMO AND C.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô] AND C.SAFRA=[Ô] & txtSafra2.Value & [Ô]) as SAFRA2 [Ô] & _
[Ô]FROM ((REGISTRO_APLICACOES_INSUMO A LEFT OUTER JOIN CAD_INSUMO B ON A.COD_INSUMO = B.ID_INSUMO) [Ô] & _
[Ô]LEFT OUTER JOIN REGISTRO_APLICACOES C ON C.ID_REGISTRO_APLICACOES = A.COD_REGISTRO_APLICACOES) [Ô]


Porem o parametro c.safra não esta sendo obdecido, eu precisava que ele some por insumo e tenha o filtro por safra, alguem pode me ajudar com esta duvida.
Uso firebird e o visualreportx para a impressão.
RCMRO 28/12/2009 16:33:00
#330588
Resposta escolhida
Qual é a chave de ligação entre as tabelas [Ô]registro_aplicacoes_insumo[Ô] e [Ô]registro_aplicacoes[Ô]?
Precisa de algo como [Ô]a.idAplicacao = c.idAplicacao[Ô] ou [Ô]b.idAplicacao = c.idAplicacao[Ô] para poder fazer a ligação que você quer.
PAULOHSV 29/12/2009 08:42:44
#330640
Mas a ligação existe neste ponto LEFT OUTER JOIN REGISTRO_APLICACOES C ON C.ID_REGISTRO_APLICACOES = A.COD_REGISTRO_APLICACOES
RCMRO 29/12/2009 09:07:48
#330642
Desculpe... Falha técnica...

Bem, o SQL é este aqui...
Joga ele no editor do ACCESS, trocando as entradas externas (Identificador_fazenda, txtSafra1.Value e txtSafra2.Value) por valores fixos, para o ACCESS colocar aquele bando de parenteses que eu não sei o critério e ai pode aplicar ao VB, voltando as variáveis externas.

SELECT      B.ID_INSUMO,
B.NOME_COMERCIAL,
SUM(A1.QUANTIDADE) AS SAFRA1,
SUM(A2.QUANTIDADE) AS SAFRA2
FROM CAD_INSUMO B
LEFT JOIN REGISTRO_APLICACOES_INSUMO A1
ON A1.COD_INSUMO = B.ID_INSUMO
LEFT JOIN REGISTRO_APLICACOES C1
ON C1.ID_REGISTRO_APLICACOES = A1.COD_REGISTRO_APLICACOES
AND C1.COD_FAZENDA = [Ô] & Identificador_fazenda & [Ô]
AND C1.SAFRA = [Ô] & txtSafra1.Value & [Ô],
LEFT JOIN REGISTRO_APLICACOES_INSUMO A2
ON A2.COD_INSUMO = B.ID_INSUMO
LEFT JOIN REGISTRO_APLICACOES C2
ON C2.ID_REGISTRO_APLICACOES = A2.COD_REGISTRO_APLICACOES
AND C2.COD_FAZENDA = [Ô] & Identificador_fazenda & [Ô]
AND C2.SAFRA = [Ô] & txtSafra2.Value & [Ô]
GROUP BY B.ID_INSUMO, B.NOME_COMERCIAL
RCMRO 29/12/2009 09:31:33
#330644
NOSSA...
O SQL do ACCESS é bem confuso....
Criei uma pequena estrutura no ACCESS para ajudar a validar e cheguei ao SQL abaixo... (Novamente, substitua os valores pelas suas variáveis)

SELECT B.ID_INSUMO, B.NOME_COMERCIAL, Sum(A1.QUANTIDADE) AS SAFRA1, Sum(A2.QUANTIDADE) AS SAFRA2
FROM (((CAD_INSUMO AS B LEFT JOIN REGISTRO_APLICACOES_INSUMO AS A1 ON B.ID_INSUMO = A1.COD_INSUMO) LEFT JOIN REGISTRO_APLICACOES AS C1 ON A1.COD_REGISTRO_APLICACOES = C1.ID_REGISTRO_APLICACOES) LEFT JOIN REGISTRO_APLICACOES_INSUMO AS A2 ON B.ID_INSUMO = A2.COD_INSUMO) LEFT JOIN REGISTRO_APLICACOES AS C2 ON A2.COD_REGISTRO_APLICACOES = C2.ID_REGISTRO_APLICACOES
WHERE C1.COD_FAZENDA=1 AND C1.SAFRA=1 AND C2.COD_FAZENDA=1 AND C2.SAFRA=2
GROUP BY B.ID_INSUMO, B.NOME_COMERCIAL;
PAULOHSV 30/12/2009 13:52:43
#330756
Citação:

SELECT B.ID_INSUMO,
B.NOME_COMERCIAL,
SUM(A1.QUANTIDADE) AS SAFRA1,
SUM(A2.QUANTIDADE) AS SAFRA2
FROM CAD_INSUMO B
LEFT JOIN REGISTRO_APLICACOES_INSUMO A1
ON A1.COD_INSUMO = B.ID_INSUMO
LEFT JOIN REGISTRO_APLICACOES C1
ON C1.ID_REGISTRO_APLICACOES = A1.COD_REGISTRO_APLICACOES
AND C1.COD_FAZENDA = [Ô] & Identificador_fazenda & [Ô]
AND C1.SAFRA = [Ô] & txtSafra1.Value & [Ô],
LEFT JOIN REGISTRO_APLICACOES_INSUMO A2
ON A2.COD_INSUMO = B.ID_INSUMO
LEFT JOIN REGISTRO_APLICACOES C2
ON C2.ID_REGISTRO_APLICACOES = A2.COD_REGISTRO_APLICACOES
AND C2.COD_FAZENDA = [Ô] & Identificador_fazenda & [Ô]
AND C2.SAFRA = [Ô] & txtSafra2.Value & [Ô]
GROUP BY B.ID_INSUMO, B.NOME_COMERCIAL



Desta forma deu mais ou menos certo,ele retorna os registros, porem ele soma tudo, não separando por safra. O resultado tanto da safra1 quanto da safra2 é o somatorio de tudo que foi gravado na tabela.
RCMRO 30/12/2009 14:50:58
#330760
NOSSA... Erro muito feio... Desculpe...
Ai vai a que acredito estar correto.

SELECT      B.ID_INSUMO,
B.NOME_COMERCIAL,
S1.SAFRA1,
S2.SAFRA2
FROM (CAD_INSUMO B
LEFT JOIN (SELECT A1.COD_INSUMO, SUM(A1.QUANTIDADE) AS SAFRA1
FROM REGISTRO_APLICACOES_INSUMO A1
LEFT JOIN REGISTRO_APLICACOES C1
ON C1.ID_REGISTRO_APLICACOES = A1.COD_REGISTRO_APLICACOES
WHERE C1.COD_FAZENDA=1 AND C1.SAFRA=1
GROUP BY A1.COD_INSUMO) AS S1
ON S1.COD_INSUMO = B.ID_INSUMO)
LEFT JOIN (SELECT A2.COD_INSUMO, SUM(A2.QUANTIDADE) AS SAFRA2
FROM REGISTRO_APLICACOES_INSUMO A2
LEFT JOIN REGISTRO_APLICACOES C2
ON C2.ID_REGISTRO_APLICACOES = A2.COD_REGISTRO_APLICACOES
WHERE C2.COD_FAZENDA=1 AND C2.SAFRA=2
GROUP BY A2.COD_INSUMO) AS S2
ON S2.COD_INSUMO = B.ID_INSUMO
PAULOHSV 30/12/2009 14:59:22
#330762
Muito obrigado mesmo. Agora deu certinho..
Tópico encerrado , respostas não são mais permitidas