selecionar dados por mês
Preciso selecionar os dados somando mes a mes, por exemplo:
O insumo 30 gastou 1000 kg no mes 01 e 1500 no mes 10
então fiz da seguinte forma:
SQL = "SELECT DISTINCT A.COD_INSUMO," & _
"(Select Sum(QUANTIDADE)as QTO From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-01-01' AND C.DATAP<='" & txtAno.Text & "-01-31' ) as JANEIRO," & _
"(Select Sum(QUANTIDADE)as QT1 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-02-01' AND C.DATAP<='" & txtAno.Text & "-02-28' ) as FEVEREIRO," & _
"(Select Sum(QUANTIDADE)as QT2 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-03-01' AND C.DATAP<='" & txtAno.Text & "-03-31' ) as MARCO," & _
"(Select Sum(QUANTIDADE)as QT3 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-04-01' AND C.DATAP<='" & txtAno.Text & "-04-30' ) as ABRIL," & _
"(Select Sum(QUANTIDADE)as QT4 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-05-01' AND C.DATAP<='" & txtAno.Text & "-05-31' ) as MAIO," & _
"(Select Sum(QUANTIDADE)as QT5 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-06-01' AND C.DATAP<='" & txtAno.Text & "-06-30' ) as JUNHO," & _
"(Select Sum(QUANTIDADE)as QT6 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-07-01' AND C.DATAP<='" & txtAno.Text & "-07-31' ) as JULHO," & _
"(Select Sum(QUANTIDADE)as QT7 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-08-01' AND C.DATAP<='" & txtAno.Text & "-08-31' ) as AGOSTO," & _
"(Select Sum(QUANTIDADE)as QT8 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-09-01' AND C.DATAP<='" & txtAno.Text & "-09-31' ) as SETEMBRO," & _
"(Select Sum(QUANTIDADE)as QT9 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-10-01' AND C.DATAP<='" & txtAno.Text & "-10-31' ) as OUTUBRO," & _
"(Select Sum(QUANTIDADE)as QT10 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-11-01' AND C.DATAP<='" & txtAno.Text & "-11-30' ) as NOVEMBRO," & _
"(Select Sum(QUANTIDADE)as QT11 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-12-01' AND C.DATAP<='" & txtAno.Text & "-12-31' ) as DEZEMBRO," & _
"A.COD_INSUMO,B.ID_INSUMO,B.NOME_COMERCIAL " & _
" FROM ((RECEITUARIO_AGRONOMICO_INSUMO A LEFT JOIN CAD_INSUMO B ON B.ID_INSUMO = A.COD_INSUMO) " & _
" LEFT JOIN RECEITUARIO_AGRONOMICO C ON C.ID_RECEITUARIO_AGRONOMICO=A.COD_RECEITUARIO_AGRONOMICO)" & _
" LEFT JOIN CAD_TIPOINSUMO D ON D.ID_TIPOINSUMO=B.TIPO_INSUMO" & _
" WHERE C.COD_FAZENDA=" & Identificador_fazenda
Porem ele não esta trazendo 1000 kg em janeiro e 1500 em outubro, ele ta somando e aparecendo 2500 kg em janeiro e 2500 em outubro, como separar isto?
O insumo 30 gastou 1000 kg no mes 01 e 1500 no mes 10
então fiz da seguinte forma:
SQL = "SELECT DISTINCT A.COD_INSUMO," & _
"(Select Sum(QUANTIDADE)as QTO From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-01-01' AND C.DATAP<='" & txtAno.Text & "-01-31' ) as JANEIRO," & _
"(Select Sum(QUANTIDADE)as QT1 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-02-01' AND C.DATAP<='" & txtAno.Text & "-02-28' ) as FEVEREIRO," & _
"(Select Sum(QUANTIDADE)as QT2 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-03-01' AND C.DATAP<='" & txtAno.Text & "-03-31' ) as MARCO," & _
"(Select Sum(QUANTIDADE)as QT3 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-04-01' AND C.DATAP<='" & txtAno.Text & "-04-30' ) as ABRIL," & _
"(Select Sum(QUANTIDADE)as QT4 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-05-01' AND C.DATAP<='" & txtAno.Text & "-05-31' ) as MAIO," & _
"(Select Sum(QUANTIDADE)as QT5 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-06-01' AND C.DATAP<='" & txtAno.Text & "-06-30' ) as JUNHO," & _
"(Select Sum(QUANTIDADE)as QT6 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-07-01' AND C.DATAP<='" & txtAno.Text & "-07-31' ) as JULHO," & _
"(Select Sum(QUANTIDADE)as QT7 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-08-01' AND C.DATAP<='" & txtAno.Text & "-08-31' ) as AGOSTO," & _
"(Select Sum(QUANTIDADE)as QT8 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-09-01' AND C.DATAP<='" & txtAno.Text & "-09-31' ) as SETEMBRO," & _
"(Select Sum(QUANTIDADE)as QT9 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-10-01' AND C.DATAP<='" & txtAno.Text & "-10-31' ) as OUTUBRO," & _
"(Select Sum(QUANTIDADE)as QT10 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-11-01' AND C.DATAP<='" & txtAno.Text & "-11-30' ) as NOVEMBRO," & _
"(Select Sum(QUANTIDADE)as QT11 From RECEITUARIO_AGRONOMICO_INSUMO Where RECEITUARIO_AGRONOMICO_INSUMO.COD_INSUMO=B.ID_INSUMO AND C.DATAP>='" & txtAno.Text & "-12-01' AND C.DATAP<='" & txtAno.Text & "-12-31' ) as DEZEMBRO," & _
"A.COD_INSUMO,B.ID_INSUMO,B.NOME_COMERCIAL " & _
" FROM ((RECEITUARIO_AGRONOMICO_INSUMO A LEFT JOIN CAD_INSUMO B ON B.ID_INSUMO = A.COD_INSUMO) " & _
" LEFT JOIN RECEITUARIO_AGRONOMICO C ON C.ID_RECEITUARIO_AGRONOMICO=A.COD_RECEITUARIO_AGRONOMICO)" & _
" LEFT JOIN CAD_TIPOINSUMO D ON D.ID_TIPOINSUMO=B.TIPO_INSUMO" & _
" WHERE C.COD_FAZENDA=" & Identificador_fazenda
Porem ele não esta trazendo 1000 kg em janeiro e 1500 em outubro, ele ta somando e aparecendo 2500 kg em janeiro e 2500 em outubro, como separar isto?
Paulo Henrique
Curtidas 0
Respostas
Emerson Nascimento
17/03/2010
que informação é guardada nos campos QT0, QT1, QT2...QT11 ???
GOSTEI 0
Paulo Henrique
17/03/2010
Não guarda nada, simplesmente coloquei ali porque ao meu ponto de vista gerava um erro.
Mas eu preciso que retorno os valores de cada insumo separada por mes
Mas eu preciso que retorno os valores de cada insumo separada por mes
GOSTEI 0
Sérgio Saibel
17/03/2010
Por que vc utiliza LEFT JOIN ao invéz de INNER JOIN?
GOSTEI 0
Emerson Nascimento
17/03/2010
veja se assim funciona:
SQL = "SELECT " & _
" A.COD_INSUMO, B.ID_INSUMO, B.NOME_COMERCIAL, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 1 THEN A.QUANTIDADE ELSE 0 END) AS JANEIRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 2 THEN A.QUANTIDADE ELSE 0 END) AS FEVEREIRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 3 THEN A.QUANTIDADE ELSE 0 END) AS MARCO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 4 THEN A.QUANTIDADE ELSE 0 END) AS ABRIL, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 5 THEN A.QUANTIDADE ELSE 0 END) AS MAIO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 6 THEN A.QUANTIDADE ELSE 0 END) AS JUNHO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 7 THEN A.QUANTIDADE ELSE 0 END) AS JULHO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 8 THEN A.QUANTIDADE ELSE 0 END) AS AGOSTO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 9 THEN A.QUANTIDADE ELSE 0 END) AS SETEMBRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 10 THEN A.QUANTIDADE ELSE 0 END) AS OUTUBRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 11 THEN A.QUANTIDADE ELSE 0 END) AS NOVEMBRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 12 THEN A.QUANTIDADE ELSE 0 END) AS DEZEMBRO " & _
"FROM " & _
" RECEITUARIO_AGRONOMICO_INSUMO A " & _
"LEFT JOIN " & _
" CAD_INSUMO B ON B.ID_INSUMO = A.COD_INSUMO " & _
"INNER JOIN " & _
" RECEITUARIO_AGRONOMICO C ON C.ID_RECEITUARIO_AGRONOMICO=A.COD_RECEITUARIO_AGRONOMICO " & _
" AND EXTRACT(YEAR FROM C.DATAP) = " & txtAno.Text & _
"WHERE " & _
" C.COD_FAZENDA = " & Identificador_fazenda & _
" GROUP BY " & _
" A.COD_INSUMO, B.ID_INSUMO, B.NOME_COMERCIAL "
você usa subseletcs desnecessariamente.
elas devem ser usadas em último caso, pois oneram bastante o motor de busca do banco de dados.
SQL = "SELECT " & _
" A.COD_INSUMO, B.ID_INSUMO, B.NOME_COMERCIAL, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 1 THEN A.QUANTIDADE ELSE 0 END) AS JANEIRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 2 THEN A.QUANTIDADE ELSE 0 END) AS FEVEREIRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 3 THEN A.QUANTIDADE ELSE 0 END) AS MARCO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 4 THEN A.QUANTIDADE ELSE 0 END) AS ABRIL, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 5 THEN A.QUANTIDADE ELSE 0 END) AS MAIO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 6 THEN A.QUANTIDADE ELSE 0 END) AS JUNHO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 7 THEN A.QUANTIDADE ELSE 0 END) AS JULHO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 8 THEN A.QUANTIDADE ELSE 0 END) AS AGOSTO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 9 THEN A.QUANTIDADE ELSE 0 END) AS SETEMBRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 10 THEN A.QUANTIDADE ELSE 0 END) AS OUTUBRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 11 THEN A.QUANTIDADE ELSE 0 END) AS NOVEMBRO, " & _
" SUM(CASE WHEN COALESCE(EXTRACT(MONTH FROM C.DATAP),0) = 12 THEN A.QUANTIDADE ELSE 0 END) AS DEZEMBRO " & _
"FROM " & _
" RECEITUARIO_AGRONOMICO_INSUMO A " & _
"LEFT JOIN " & _
" CAD_INSUMO B ON B.ID_INSUMO = A.COD_INSUMO " & _
"INNER JOIN " & _
" RECEITUARIO_AGRONOMICO C ON C.ID_RECEITUARIO_AGRONOMICO=A.COD_RECEITUARIO_AGRONOMICO " & _
" AND EXTRACT(YEAR FROM C.DATAP) = " & txtAno.Text & _
"WHERE " & _
" C.COD_FAZENDA = " & Identificador_fazenda & _
" GROUP BY " & _
" A.COD_INSUMO, B.ID_INSUMO, B.NOME_COMERCIAL "
você usa subseletcs desnecessariamente.
elas devem ser usadas em último caso, pois oneram bastante o motor de busca do banco de dados.
GOSTEI 0
Paulo Henrique
17/03/2010
Cara tu é fera, muito obrigado. Tava loco atras desta solução a um tempão e não conseguia. Funcionou perfeitamente.
Se não for abusar muito você poderia só me ajudar em um detalhe do outro topico?
Se não for abusar muito você poderia só me ajudar em um detalhe do outro topico?
GOSTEI 0
Emerson Nascimento
17/03/2010
quando o tópico for solucionado, coloque essa indicação no mesmo.
GOSTEI 0