Fórum Ajuda em SQL para relatório #275392
04/04/2005
0
conseguindo
montar a Query de forma Correta, quanto ao Report Builder sei utilizar sem
problemas, O Lay-Out do Relatório deve ser o seguinte
[b:dbafead656]Departamento[/b:dbafead656] | [b:dbafead656]VL. Acumulado [/b:dbafead656]| [b:dbafead656]VL. Deste Caixa [/b:dbafead656]|
[b:dbafead656]VL. Acumulado Mês [/b:dbafead656]|
RH | 1500,00 | 150,00 |
250,00 |
Prod | 1800,00 | 200,00 |
300,00 |
[b:dbafead656]Departamento[/b:dbafead656] = Registro da Tabela Departamento
[b:dbafead656]VL. Acumulado[/b:dbafead656] = Todos os registros da Tabela MovimentoCaixaItem
Anteriores ao mes de Abril de 2005
O meu problema esta porque eu não posso apenas dar um Sum Agrupando por
departamento, eu preciso dar um Sum mas passando cada departamento que esta
na tabela departamento como parametro, ou seja preciso criar uma Linha para
cada registro que existe na tabela Departamento mesmo que o valor seja 0
A estrutura é a seguinte:
Tabela Departamento
Li_IDDepartamento
Str_NomeDepartamento
Tabela MovimentoCaixa (Master)
Li_IDMovimentoCaixa
DT_DataCaixa
Tabela MovimentoCaixaItem (Detalhe)
Li_IDMovimentoCaixa
Li_IDDepartamento
DBL_ValorLancamento
Acho que consegui explicar
Ariovaldo
Curtir tópico
+ 0Posts
04/04/2005
Kotho
Cara, qual o banco de dados que você está utilizando.
Gostei + 0
04/04/2005
Ariovaldo
se tiver afim de ajudar e é claro com boa educação e vontade estou usando Banco Firebird 1.3.05
Gostei + 0
04/04/2005
Ariovaldo
Gostei + 0
04/04/2005
Repa
Vc poderia criar uma tabela temporária apenas c/ os campos que vc precisa...
Gostei + 0
04/04/2005
Ariovaldo
Gostei + 0
04/04/2005
Marlon Spiess
select
Departamento, VL. Deste Caixa,
(select sum(VL. Deste Caixa) from table where data >= x and data <= y) as VL. Acumulado Mês,
(select sum(VL. Deste Caixa) from table where data >= x and data <= y) as VL. Acumulado
from table, table_dep
where .......
qdo vc precisa acumular uma coluna por determinado range, faz o select dentro do select.
Espero ter ajudar
Gostei + 0
05/04/2005
Ariovaldo
Select departamento.Li_IDDepto, sum(movimentoCaixaItem.dbl_debito)
from departamento
Left Join MovimentoCaixaItem on(MovimentoCaixaItem.Li_IDDepto = Departamento.Li_IDDepto)
Group by Departamento.Li_IDDepto
LI_IDDEPTO SUM
========== ========
1 447
2 1680
3 1666
4 2654
5 695
6 1077
7 1785
8 1411
9 156
[b:5242831371] 10 <null>
11 <null> [/b:5242831371]
99 10
POrém quando coloco o Where que para isso preciso acrescentar um Join conforme abaixo o Resultado vem errado, ou seja os campo Null não são exibidos é eu preciso que eles sejam exibidos
Select departamento.Li_IDDepto, sum(movimentoCaixaItem.dbl_debito)
from departamento
left Join MovimentoCaixaItem on(Departamento.Li_IDDepto = MovimentoCaixaItem.Li_IDDepto)
Left Join MovimentoCaixa on(MovimentoCaixaItem.Li_IDMovimentoCaixa = MovimentoCaixa.Li_IDMovimentoCaixa)
where MovimentoCaixa.DT_DataMontagem Between ´01/01/2004´ AND ´03/04/2006´
Group by Departamento.Li_IDDepto
LI_IDDEPTO SUM
========== ========
1 447
2 1680
3 1666
4 2654
5 695
6 1077
7 1785
8 1411
9 156
99 10
Gostei + 0
05/04/2005
Rjun
Gostei + 0
05/04/2005
Ariovaldo
Gostei + 0
06/04/2005
Ariovaldo
SELECT
DEPARTAMENTO.LI_IDDEPTO,
SUM(MOVIMENTOCAIXAITEM.DBL_DEBITO)
FROM
DEPARTAMENTO LEFT JOIN MOVIMENTOCAIXAITEM ON( MOVIMENTOCAIXAITEM.LI_IDDEPTO = DEPARTAMENTO.LI_IDDEPTO )
LEFT JOIN MOVIMENTOCAIXA ON( MOVIMENTOCAIXAITEM.LI_IDMOVIMENTOCAIXA = MOVIMENTOCAIXA.LI_IDMOVIMENTOCAIXA )
WHERE
( MOVIMENTOCAIXA.DT_DATAMONTAGEM BETWEEN ´03/01/2005´ AND ´04/15/2005´ ) or
( DEPARTAMENTO.LI_IDDEPTO NOT IN ( SELECT
MOVIMENTOCAIXAITEM.LI_IDDEPTO
FROM
MOVIMENTOCAIXAITEM LEFT JOIN MOVIMENTOCAIXA ON ( MOVIMENTOCAIXAITEM.LI_IDMOVIMENTOCAIXA = MOVIMENTOCAIXA.LI_IDMOVIMENTOCAIXA )
WHERE
MOVIMENTOCAIXA.DT_DATAMONTAGEM BETWEEN ´03/01/2005´ AND ´04/15/2005´ ) )
GROUP BY
DEPARTAMENTO.LI_IDDEPTO
Gostei + 0
14/04/2005
Arc@njo
SELECT DEPARTAMENTO.LI_IDDEPTO, SUM(MOVIMENTOCAIXAITEM.DBL_DEBITO)
FROM DEPARTAMENTO
LEFT JOIN MOVIMENTOCAIXAITEM ON( MOVIMENTOCAIXAITEM.LI_IDDEPTO = DEPARTAMENTO.LI_IDDEPTO)
LEFT JOIN MOVIMENTOCAIXA ON( MOVIMENTOCAIXAITEM.LI_IDMOVIMENTOCAIXA = MOVIMENTOCAIXA.LI_IDMOVIMENTOCAIXA AND MOVIMENTOCAIXA.DT_DATAMONTAGEM BETWEEN ´03/01/2005´ AND ´04/15/2005´)
GROUP BY
DEPARTAMENTO.LI_IDDEPTO
Coloque o filtro de datas dentro da clausula ON pois assim so irao relacionar os registros daquele periodo e não o da tabela inteira, pela ordem o SQL faz, usando a clausula where, o produto cartesiano das tabelas e depois as filtra por isto não aparecia, usando na clausula ON so sera feito produto cartesiano dos registros validos.
Espero ter ajudado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)