CALCULO COM SQL

PAULOHSV 09/03/2010 16:20:33
#336451
Esta é a minha sql

Citação:

SQL = [Ô]SELECT DISTINCT A.ID_MAQUINARIO,[Ô] & _
[Ô](Select Sum(VALORT_MAQUINARIOS)as VALORT_REGISTRO From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) as CUSTO_REGISTRO_APLICACOES,[Ô] & _
[Ô](((Select Sum(VALORT_MAQUINARIOS)as VTR From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) *100)/((Select Sum(VALORT_MAQUINARIOS)as VALORT_REGISTRO From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) + (Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô])+ (Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]))) AS P1,[Ô] & _
[Ô](Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) as CUSTO_ABASTECIMENTO,[Ô] & _
[Ô](((Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) *100)/((Select Sum(VALORT_MAQUINARIOS)as VALORT_REGISTRO From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) + (Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô])+ (Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]))) AS P2,[Ô] & _
[Ô](Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) as CUSTO_MANUTENCAO,[Ô] & _
[Ô](((Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) *100)/((Select Sum(VALORT_MAQUINARIOS)as VALORT_REGISTRO From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) + (Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô])+ (Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]))) AS P3,[Ô] & _
[Ô]((Select Sum(VALORT_MAQUINARIOS)as VALORT_REGISTRO From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) + (Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô])+ (Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô])) AS CUSTO_TOTAL,[Ô] & _
[Ô]A.ID_MAQUINARIO,A.MARCA,A.MODELO,B.NOME [Ô] & _
[Ô] FROM CAD_MAQUINARIO A LEFT JOIN CAD_TIPO_MAQUINARIO B ON B.ID_TIPO_MAQUINARIO = A.COD_TIPO_MAQUINARIO [Ô] & _
[Ô] LEFT JOIN REGISTRO_APLICACOES_MAQUINARIO C ON C.COD_MAQUINARIO=A.ID_MAQUINARIO[Ô] & _
[Ô] LEFT JOIN ABASTECIMENTO D ON D.COD_MAQUINARIO=A.ID_MAQUINARIO[Ô] & _
[Ô] LEFT JOIN MANUTENCAO_EQUIPAMENTOS E ON E.COD_MAQUINARIO=A.ID_MAQUINARIO[Ô] & _
[Ô] WHERE A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô] [Ô]



Ela funciona, mas na parte onde eu calculo a porcentagem ja esta vindo totalizado de todos os insumos, e eu gostaria que viesse de insumo por insumo. Alguem poderia me ajudar a descobrir o que estou fazendo de errado?
LLAIA 09/03/2010 17:39:59
#336467
cara, essa é uma das queries mais monstros que já vi !!! Dá até medo! 0_o

vc tá usando algum SGBD? Se sim, já pensou na possibilidade de uma Stored Procedure ? Sem um exemplo tá dificil. Diga quais são as tabelas, e dá um print no resultado da consulta e mostra pra gente.

DANIKULL 09/03/2010 17:50:12
#336469
PAULOHSV, boa tarde.

Não via na sua consulta um Group By, ja tentou usar ele nos insumos???

PAULOHSV 10/03/2010 15:53:49
#336564
RCMRO fiz as correções dos nome ficando da seguinte forma:


Citação:

SQL = [Ô] SELECT cmq.id_maquinario,[Ô] & _
[Ô]SUM(ram.valort_maquinarios) AS custo_registro_aplicacoes,[Ô] & _
[Ô](SUM(ram.valort_maquinarios) * 100) / ( SUM(ram.valort_maquinarios)[Ô] & _
[Ô] + SUM(abt.valor_total)[Ô] & _
[Ô] + SUM(meq.valor))AS P1,[Ô] & _
[Ô] SUM(abt.valor_total)AS custo_abastecimento,[Ô] & _
[Ô](SUM(abt.valor_total) * 100) / ( SUM(ram.valort_maquinarios)[Ô] & _
[Ô] + SUM(abt.valor_total)[Ô] & _
[Ô] + SUM(meq.valor))AS P2,[Ô] & _
[Ô] SUM(meq.valor)AS custo_manutencao,[Ô] & _
[Ô](SUM(meq.valor) * 100) / ( SUM(ram.valort_maquinarios)[Ô] & _
[Ô] + SUM(abt.valor_total)[Ô] & _
[Ô] + SUM(meq.valor))AS P3,[Ô] & _
[Ô] SUM(ram.valort_maquinarios) AS custo_total,[Ô] & _
[Ô] cmq.a.marca,cmq.modelo,ctm.nome[Ô] & _
[Ô] FROM cad_maquinario AS cmq [Ô] & _
[Ô] INNER JOIN registro_aplicacoes_maquinario AS ram ON ram.cod_maquinario = cmq.id_maquinario [Ô] & _
[Ô] INNER JOIN abastecimento AS abt ON abt.cod_maquinario=cmq.id_maquinario[Ô] & _
[Ô] INNER JOIN manutencao_equipamentos AS meq ON meq.cod_maquinario=cmq.id_maquinario[Ô] & _
[Ô] INNER JOIN cad_tipo_maquinario AS ctm ON ctm.id_tipo_maquinario = cmq.cod_tipo_maquinario[Ô] & _
[Ô] WHERE cmq.cod_fazenda =[Ô] & Identificador_fazenda & _
[Ô] GROUP BY cmq.id_maquinario, cmq.marca, cmq.modelo, ctm.nome[Ô] & _
[Ô] ORDER BY cmq.id_maquinario, cmq.marca, cmq.modelo, ctm.nome[Ô]



porem aparece o erro de token unknown
PAULOHSV 12/03/2010 08:32:35
#336712
Firebird 2.0
PAULOHSV 16/03/2010 08:54:56
#337057
O erro ainda continua, como uso o visual reportx resolvi fazer os calculos dentro do componente, porem só existe um problema que é o calculo do Custo Total que esta nesta parte:

Citação:

((Select Sum(VALORT_MAQUINARIOS)as VALORT_REGISTRO From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) + (Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô])+ (Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô])) AS CUSTO_TOTAL



O sistema só esta calculando o custo total se o maquinario tiver movimentação nas 3 tabelas, creio que teria de ter alguam condição if dentro deste sql para somar a(s) outra(s) tabelas indenpendete se alguma retornou valor null. Se resolver isto acaba todo problema que ainda tenho a resolver neste sistema.
GLAUCIO 16/03/2010 09:42:03
#337062
Paulo, já tentou utilizar o isnull ?

(isnull(( Select Sum(VALORT_MAQUINARIOS)as VALORT_REGISTRO From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]),0) + 
isnull((Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]),0)+
isnull((Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]),0)) AS CUSTO_TOTAL
PAULOHSV 16/03/2010 15:44:31
#337097
o Isnull também gerou um erro, tentei com a função coalesce ficando da seguinte forma mas tbm da erro

Citação:

SQL = [Ô]SELECT DISTINCT A.ID_MAQUINARIO,[Ô] & _
[Ô](Select Sum(VALORT_MAQUINARIOS)as VALORT_REGISTRO From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) as CUSTO_REGISTRO_APLICACOES,[Ô] & _
[Ô](Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) as CUSTO_ABASTECIMENTO,[Ô] & _
[Ô](Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]) as CUSTO_MANUTENCAO,[Ô] & _
[Ô](COALESCE((Select Sum(VALORT_MAQUINARIOS)as VALORT_REGISTRO From REGISTRO_APLICACOES_MAQUINARIO Where REGISTRO_APLICACOES_MAQUINARIO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô])) + COALESCE((Select Sum(VALOR_TOTAL)as VALORT_ABASTECIMENTO From ABASTECIMENTO Where ABASTECIMENTO.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]),0)+ COALESCE((Select Sum(VALOR)as VALORT_MANUTENCAO From MANUTENCAO_EQUIPAMENTOS Where MANUTENCAO_EQUIPAMENTOS.Cod_MAQUINARIO=A.ID_MAQUINARIO AND A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô]),0)) AS CUSTO_TOTAL[Ô] & _
[Ô]A.ID_MAQUINARIO,A.MARCA,A.MODELO,B.NOME [Ô] & _
[Ô] FROM CAD_MAQUINARIO A LEFT JOIN CAD_TIPO_MAQUINARIO B ON B.ID_TIPO_MAQUINARIO = A.COD_TIPO_MAQUINARIO [Ô] & _
[Ô] LEFT JOIN REGISTRO_APLICACOES_MAQUINARIO C ON C.COD_MAQUINARIO=A.ID_MAQUINARIO[Ô] & _
[Ô] LEFT JOIN ABASTECIMENTO D ON D.COD_MAQUINARIO=A.ID_MAQUINARIO[Ô] & _
[Ô] LEFT JOIN MANUTENCAO_EQUIPAMENTOS E ON E.COD_MAQUINARIO=A.ID_MAQUINARIO[Ô] & _
[Ô] WHERE A.COD_FAZENDA=[Ô] & Identificador_fazenda & [Ô] [Ô]

PAULOHSV 17/03/2010 10:36:10
#337156
Apos muitos testes cheguei a seguinte conclusão com a ajuda do RMCO e do Glaucio

SQL = [Ô]SELECT [Ô] & _
[Ô] A.ID_MAQUINARIO, A.MARCA, A.MODELO, B.NOME, [Ô] & _
[Ô] (Select Coalesce(Sum(RAM.VALORT_MAQUINARIOS),0) [Ô] & _
[Ô] From REGISTRO_APLICACOES_MAQUINARIO RAM [Ô] & _
[Ô] where RAM.Cod_MAQUINARIO=A.ID_MAQUINARIO) as CUSTO_REGISTRO_APLICACOES, [Ô] & _
[Ô] (Select Coalesce(Sum(AB.VALOR_TOTAL),0) [Ô] & _
[Ô] From ABASTECIMENTO AB [Ô] & _
[Ô] Where AB.Cod_MAQUINARIO=A.ID_MAQUINARIO) as CUSTO_ABASTECIMENTO, [Ô] & _
[Ô] (Select Coalesce(Sum(ME.VALOR),0) [Ô] & _
[Ô] From MANUTENCAO_EQUIPAMENTOS ME [Ô] & _
[Ô] Where ME.Cod_MAQUINARIO=A.ID_MAQUINARIO) as CUSTO_MANUTENCAO, [Ô] & _
[Ô] ( (Select Coalesce(Sum(RAM.VALORT_MAQUINARIOS),0) [Ô] & _
[Ô] From REGISTRO_APLICACOES_MAQUINARIO RAM [Ô] & _
[Ô] Where RAM.Cod_MAQUINARIO=A.ID_MAQUINARIO) + [Ô] & _
[Ô] (Select Coalesce(Sum(AB.VALOR_TOTAL),0) [Ô] & _
[Ô] From ABASTECIMENTO AB [Ô] & _
[Ô] Where AB.Cod_MAQUINARIO=A.ID_MAQUINARIO) + [Ô] & _
[Ô] (Select Coalesce(Sum(ME.VALOR),0) [Ô] & _
[Ô] From MANUTENCAO_EQUIPAMENTOS ME [Ô] & _
[Ô] Where ME.Cod_MAQUINARIO=A.ID_MAQUINARIO) [Ô] & _
[Ô] ) AS CUSTO_TOTAL [Ô] & _
[Ô]FROM CAD_MAQUINARIO A [Ô] & _
[Ô]LEFT JOIN CAD_TIPO_MAQUINARIO B ON B.ID_TIPO_MAQUINARIO = A.COD_TIPO_MAQUINARIO [Ô] & _
[Ô]WHERE A.COD_FAZENDA = [Ô] & Identificador_fazenda

porem agora eu preciso fazer um filtro que esta na tabela abastecimento, eu tentei fazer:

Citação:

SQL = SQL & [Ô] AND AB.DATA >=[ô][Ô] & Format(txtDataInicial.Text, [Ô]yyyy-mm-dd[Ô]) & [Ô][ô][Ô]
SQL = SQL & [Ô] AND AB.DATA <=[ô][Ô] & Format(txtData.Text, [Ô]yyyy-mm-dd[Ô]) & [Ô][ô][Ô]



mas deu erro, tentei voltar o relacionamento para a parte final do sql, mas também da erro, alguem tem alguma ideia para me ajudar?
Tópico encerrado , respostas não são mais permitidas