Fórum selecionar dados por mês #61097

17/03/2010

0

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?
Paulo Henrique

Paulo Henrique

Responder

Posts

17/03/2010

Emerson Nascimento

que informação é guardada nos campos QT0, QT1, QT2...QT11 ???
Responder

Gostei + 0

17/03/2010

Paulo Henrique

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
Responder

Gostei + 0

17/03/2010

Sérgio Saibel

Por que vc utiliza LEFT JOIN ao invéz de INNER JOIN? 
Responder

Gostei + 0

17/03/2010

Emerson Nascimento

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.

Responder

Gostei + 0

17/03/2010

Paulo Henrique

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?
Responder

Gostei + 0

18/03/2010

Emerson Nascimento

quando o tópico for solucionado, coloque essa indicação no mesmo.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar