Deu Zica .. select(sum)

1. Deu Zica .. select(sum)

wesley rengel viana
wesrenv

(usa Nenhuma)

Enviado em 02/05/2008 - 10:58h

Blza até consigui o que queria o problema é esse eu tenho duas tabelas rezumidamente como segue abaixo,

obra valor passagem
01 125.65 ctbaxsao
01 32.65 ctbaxsao
02 145.00 saoxctba
02 145.00 saoxctba

blza até aqui consegui montar o ralatorio da seguinte forma
obra 01 total passagens 158.30
obra 02 total passagens 290.00

ai tenho mais uma tabela rezumidamente como segue abaixo
obra valor hotel
01 100.00 san hose
01 200.00 calina hotel
02 150.00 sao francisco
02 300.00 paulista

blza até aqui consegui montar o ralatorio da seguinte forma
obra 01 total hotel 300.00
obra 02 total hotel 450.00

ai agora eu presiso de um relatorio que consiga o valor total da despesa de uma determinada obra que ficaria assim

obra 01 total geral 458.30
obra 02 total geral 750.00

tem como fazer isso ? pegar totais das duas tabelas e juntar ?

obs. to usando assim - select *, sum(valor_total) from tarifa_hotel where dataini>=\"20080401\" and dataini<=\"20080431\" group by obra - pra pegar dados dos dois relatorios da passagens e dos hoteis ..






  


2. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 11:14h

vc ta usando qual banco? mysql? A versão que ta usando suporta union??? Acho que terá de usar union e depois um subselect para extrair o total. Vai ficar meio lento dependendo da quantidade de informações. O correto neste caso era a modelagem armazenar as obrar em uma unica tabela e ter uma identificação da obra (passagem e hotel), referenciada em outra tabela.
tabela obra
obra id valor
01 1 10,00
01 2 20,00

tabela id
id titulo
1 passagem
2 hotel



3. ficaria mais ou menos assim

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 11:16h

não to com mysql para testar e to meio enferrujado em SGBD mas se errei foi alguma coisa boba.

select obra, sum(valor_total) from (
select obra, valor_total from tarifa_hotel
union
select obra, valor_total from passagem
)
group by obra



4. Ixiii ..

wesley rengel viana
wesrenv

(usa Nenhuma)

Enviado em 02/05/2008 - 11:20h

Agora [*****]...

To usando Mysql 4.1 se isso ajuda, mas nao entendo nada de union, é realmente planejei mal as tabelas mas achei que desce pra puxar dados de duas tabelas ao mesmo tempo ..

to ferrado ! ja tem um monte de informacoes !


5. erro

wesley rengel viana
wesrenv

(usa Nenhuma)

Enviado em 02/05/2008 - 12:52h

ta dando esse erro

every derived table must have its own alias

que isso ?



6. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 14:32h

esse erro é por causa do alias.
Eu to meio enferrujado como falei em sgdb e não tenho mysql 4.1 aqui, mas acho que se você colocar as nos campos e na tabela talvez funcione.
tenta assim:

select ob, sum(vl) from (
select obra as ob, valor_total as vl from tarifa_hotel
union
select obra as ob, valor_total as vl from passagem
) as tabelaJunta
group by ob

da uma olhada tbem na documentação do mysql.



7. Socorrooooooo

wesley rengel viana
wesrenv

(usa Nenhuma)

Enviado em 02/05/2008 - 16:42h

Gente ta [*****] trabalhar sobre pressão , meu chefe ta me cobrando uma resposta urgente o problema é que nao da certo de jeito nenhum a minha "juntada" de tabelas to fazendo assim ó -

select ob, sum(vl) from (select obra as ob, valor_total as vl from tarifa_hotel where dataini>=\"20080401\" and dataini<=\"20080431\" union
select obra as ob, valor as vl from tarifa_passagem where data_sai>=\"080401\" and data_sai<=\"080431\" ) as tabelajunta group by ob - eu consigo fazer aparecer as obras e valores porem nao sao valores totalizado e sim valores loucos ..alguem sabe dizer onde esta o erro ?


8. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 17:34h

como assim valores loucos?
Se você executa em separado, tipo primeiro executa a parte do union, você verificou se ele esta trazendo os dados corretos?
Os tipos dos campos são os mesmos?



9. Opa

wesley rengel viana
wesrenv

(usa Nenhuma)

Enviado em 02/05/2008 - 18:25h

Amigo ele traz valores estranhos por exemplo em determinada obra eu tenho 1000 de passagens e 500 de hotel e ele diz que o valor juntado é de 850 vai entender isso ...nao pode me dar seu telefone pra que eu possa te ligar aqui da empresa, é que estou ficando louco ja ...e isso é muito importante pra eu manter o php aqui na empresa..

valeu agradeço desde ja


10. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 18:30h

to na empresa tbem e to enrolado. Posso te ajudar por aqui conforme tenho algum tempo livre. Isto é estranho. Qdo vc pede o union volta os 2 campos, tanto o de 500 quanto o de 1000? Você verificou se o tipo de campo é o mesmo nas 2 tabelas? pq senão pode dar problemas mesmo.


11. ah

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 18:32h

poe o resultado do select union e depois o resultado da query completa aqui para eu "tentar deduzir" oque ta pegando.


12. Tenta assim

Vinicus S Moraes
vsmoraes

(usa Arch Linux)

Enviado em 02/05/2008 - 18:47h

SELECT
a.obra,
sum(a.valor)+sum(b.valor)
FROM
tabela1 a LEFT JOIN tabela2 b ON a.obra=b.obra
GROUP BY a.obra,b.obra



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts