- Este tópico contém 58 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 9 meses atrás por
MARCIO_LOK.
-
AutorPosts
-
9 de junho de 2010 às 9:08 pm #94483
fsitja
ParticipanteA última questão é tranquilo, dá para filtrar na parte externa do código.
Eu não estou com tempo de testar agora, mas à noite posto para você com essa alteração.
Quanto ao problema de não existir número de conta na CLANCA, eu agora fiquei meio intrigado… como você identifica onde foi feito o lançamento se não há o número da conta lá?
Poderia haver outra tabela que mapeie clanca para um número de conta, que não foi mencionada ainda?
9 de junho de 2010 às 9:09 pm #94484MARCIO_LOK
ParticipanteOpa, resolvi a questao numero 2 e três, incluir este join(em negrito), dai deu certo…
… from (select rpad(codconta, 20, ‘0’) codconta, descricao from cconta WHERE SubStr(codconta,1,1)=’3′) c
left join (select rpad(c.codconta,20, ‘0’) codconta, l.*
[b]FROM cLanca L join cConta C
ON L.CodColigada = C.CodColigada
AND (L.Credito = C.CodConta
OR L.Debito = C.CodConta)…. [/b]Só a conta de nivel 1 que não está batendo…. vou fazer um pente fino nos dados para ver o que é….
Poderia me ajudar a resolver a questao 4?
Nao listar as contas que tem os valores em branco(zerado) no periodo?
conforme mencionado acima?
Valeu, brigadao9 de junho de 2010 às 11:47 pm #94487MARCIO_LOK
ParticipanteOla amigo, entao eu ligo ela na cconta…. dai busca codconta na cconta… como mencionei, deu certo, consegui, resolver, só fantando mesmo a questao numero 4…. fazendo a questao numero credito…. despesas e receitas estarao pronto….
Depois vou tentar tirar o saldo anterior…. (tabela CSDANT) dai deixo pronto tambem o ativo e passivo…. dai acabou j aera…tente entao testar a questao numero 4 por favor, e me mande se possivel.,
brigadao fsitja.10 de junho de 2010 às 12:05 am #94488MARCIO_LOK
Participantemais um detalhe simples que nao consegui fazer…. 😕
Deixar nessa sequencia…codconta descricao janeiro…fevereiro….etc
hoje esta assim:
descricao codconta janeiro….fevereiro….etcsó mudar para codconta primeiro depois descricao… valeu
10 de junho de 2010 às 4:13 pm #94498MARCIO_LOK
ParticipanteBom dia fsitja
Conseguiu testar a questao 4 para mim, to quebrando a cabeca aqui e nada, dificil, pacas, nem mudar a ordem de codigo e descricao to conseguindo……
obrihgado, tenha um bom dia,10 de junho de 2010 às 4:45 pm #94499burga
ParticipanteVou xeretar no tópico dos outros… hehehehe
Segue uma sugestão pra questão 4 e alteração de ordem das colunas:
Coloque todo seu select novamente na cláusula from de um novo select, e no novo select coloque as condições where janeiro != 0 or fevereiro !=0 or marco != 0… dezembro != 0
Você pode alterar a ordem das colunas no novo select, ficando mais ou menos assim:
select t.codconta, t.descricao, t.janeiro, t.fevereiro...
from (SEU_SELECT) t
where
janeiro != 0 or fevereiro !=0 or marco != 0... dezembro != 0;Se eu estiver falando besteira ignore…
10 de junho de 2010 às 5:19 pm #94502MARCIO_LOK
ParticipanteVAleu pela forca, mais nao consegui resolver nao..
é nesta parte que ele faz o select que tras as informacoes…
select c.descricao,t.*
from (select DISTINCT coalesce(nivel1, nivel2, nivel3, nivel4 ,nivel5, nivel6, nivel7, nivel8, nivel9, nivel10, nivel11, nivel12, nivel13, nivel14, nivel15, nivel16, nivel17, nivel18, nivel19, nivel20) codconta,
Nvl(sum(jan),0) jan,
Nvl(sum(fev),0) fev,
Nvl(sum(mar),0) mar,
Nvl(sum(abr),0) abr,
Nvl(sum(mai),0) mai,
Nvl(sum(jun),0) jun,
Nvl(sum(jul),0) jul,
Nvl(sum(ago),0) ago,
Nvl(sum(sete),0) sete,
Nvl(sum(out),0) out,
Nvl(sum(nov),0) nov,
Nvl(sum(dez),0) dez,
nvl(sum(tot_ano),0) tot_ano,
Nvl(Round(sum(tot_ano),2),0)/12 media
from mov_mensal
group by grouping sets ((nivel1), (nivel2), (nivel3), (nivel4), (nivel5), (nivel6), (nivel7), (nivel8), (nivel9), (nivel10), (nivel11), (nivel12), (nivel13), (nivel14), (nivel15), (nivel16), (nivel17), (nivel18), (nivel19), (nivel20))
having (substr(nivel1, length(nivel1), 1) != '0')
or (substr(nivel2, length(nivel2), 1) != '0')
or (substr(nivel3, length(nivel3), 1) != '0')
or (substr(nivel4, length(nivel4), 1) != '0')
or (substr(nivel5, length(nivel5), 1) != '0')
or (substr(nivel6, length(nivel6), 1) != '0')
or (substr(nivel7, length(nivel7), 1) != '0')
or (substr(nivel8, length(nivel8), 1) != '0')
or (substr(nivel9, length(nivel9), 1) != '0')
or (substr(nivel10, length(nivel10), 1) != '0')
or (substr(nivel11, length(nivel11), 1) != '0')
or (substr(nivel12, length(nivel12), 1) != '0')
or (substr(nivel13, length(nivel13), 1) != '0')
or (substr(nivel14, length(nivel14), 1) != '0')
or (substr(nivel15, length(nivel15), 1) != '0')
or (substr(nivel16, length(nivel16), 1) != '0')
or (substr(nivel17, length(nivel17), 1) != '0')
or (substr(nivel18, length(nivel18), 1) != '0')
or (substr(nivel19, length(nivel19), 1) != '0')
or (substr(nivel20, length(nivel20), 1) != '0')) tjoin cconta c on c.codconta = t.codcontaorder by t.codconta;
de qualquer forma obrigado!10 de junho de 2010 às 5:36 pm #94503burga
ParticipanteTenta dessa forma…
select t.codconta, c.descricao,t.jan, t.fev,t.mar,t.abr,t.mai,t.jun,t.jul,t.ago,t.sete,t.out,t.nov,t.dez,t.tot_ano,t.media
from (select DISTINCT coalesce(nivel1, nivel2, nivel3, nivel4 ,nivel5, nivel6, nivel7, nivel8, nivel9, nivel10, nivel11, nivel12, nivel13, nivel14, nivel15, nivel16, nivel17, nivel18, nivel19, nivel20) codconta,
Nvl(sum(jan),0) jan,
Nvl(sum(fev),0) fev,
Nvl(sum(mar),0) mar,
Nvl(sum(abr),0) abr,
Nvl(sum(mai),0) mai,
Nvl(sum(jun),0) jun,
Nvl(sum(jul),0) jul,
Nvl(sum(ago),0) ago,
Nvl(sum(sete),0) sete,
Nvl(sum(out),0) out,
Nvl(sum(nov),0) nov,
Nvl(sum(dez),0) dez,
nvl(sum(tot_ano),0) tot_ano,
Nvl(Round(sum(tot_ano),2),0)/12 media
from mov_mensal
group by grouping sets ((nivel1), (nivel2), (nivel3), (nivel4), (nivel5), (nivel6), (nivel7), (nivel8), (nivel9), (nivel10), (nivel11), (nivel12), (nivel13), (nivel14), (nivel15), (nivel16), (nivel17), (nivel18), (nivel19), (nivel20))
having (substr(nivel1, length(nivel1), 1) != '0')
or (substr(nivel2, length(nivel2), 1) != '0')
or (substr(nivel3, length(nivel3), 1) != '0')
or (substr(nivel4, length(nivel4), 1) != '0')
or (substr(nivel5, length(nivel5), 1) != '0')
or (substr(nivel6, length(nivel6), 1) != '0')
or (substr(nivel7, length(nivel7), 1) != '0')
or (substr(nivel8, length(nivel8), 1) != '0')
or (substr(nivel9, length(nivel9), 1) != '0')
or (substr(nivel10, length(nivel10), 1) != '0')
or (substr(nivel11, length(nivel11), 1) != '0')
or (substr(nivel12, length(nivel12), 1) != '0')
or (substr(nivel13, length(nivel13), 1) != '0')
or (substr(nivel14, length(nivel14), 1) != '0')
or (substr(nivel15, length(nivel15), 1) != '0')
or (substr(nivel16, length(nivel16), 1) != '0')
or (substr(nivel17, length(nivel17), 1) != '0')
or (substr(nivel18, length(nivel18), 1) != '0')
or (substr(nivel19, length(nivel19), 1) != '0')
or (substr(nivel20, length(nivel20), 1) != '0')) tjoin cconta c on c.codconta = t.codconta
where
t.jan != 0
or t.fev != 0
or t.mar != 0
or t.abr != 0
or t.mai != 0
or t.jun != 0
or t.jul != 0
or t.ago != 0
or t.sete != 0
or t.out != 0
or t.nov != 0
or t.dez != 0
order by t.codconta;O where é o que eu falei, só pra filtrar as contas em que todos os meses possuem valor zero. Se quiser é só tirar o where dessa consulta.
10 de junho de 2010 às 6:07 pm #94508MARCIO_LOK
Participanteohhhh Perfeito valeuuuuuuuuuuuuuuuuuu
Agora só falta a outra parte da questao 4….
ou seja… nao exibir os codigos (niveis) de conta com valor zerado…
4) ultima coisa:
Existem algumas contas que nao trazem valor nenhum no mes....exemplo:
conta jan fev marc .....
1122 0 0 0 nao mostrar essa conta,
567 0 345 0 mostrar essa...pq tem movimento..nao tras nenhum valor... eu queria que ele nao trouxesse, nao mostrasse as contas que nao tem valor.... se tiver valor em um dos meses pode trazer... nao é pra trazer se nao houver movimento no periodo... parece simples ne?
[/quote]Brigadao, voces ja me ajudaram muito....
Aproveito para fazer a seguinte pergunta.... desculpe minha ignorancia, é coisa até simples....
nesta parte do codigo:[quote]
....
to_char(data, 'YYYY') ano,
to_char(data, 'MM') mes,
[b] sum(case when debito is not null then -valor
when credito is not null then valor end) mov_liq_mes[/b]
from (select rpad(codconta, 20, '0') codconta, descricao from cconta c WHERE SubStr(codconta,1,1)='3') c
left join (select rpad(c.codconta,20, '0') codconta, l.*
FROM cLanca L join cConta C
ON L.CodColigada = C.CodColigada
AND (L.Credito = C.CodConta
OR L.Debito = C.CodConta)
where to_char(l.data, 'YYYY') = '2010') l on l.codconta = c.codconta
group by c.codconta, to_char(data, 'MM'), to_char(data, 'YYYY'))
group by codconta, nivel1, nivel2, nivel3, nivel4, nivel5, nivel6, nivel7, nivel8, nivel9, nivel10, nivel11, nivel12, nivel13, nivel14, nivel15, nivel16, nivel17, nivel18, nivel19, nivel20, ano)
-- end with
select t.codconta, c.descricao,t.jan, t.fev,t.mar,t.abr,t.mai,t.jun,t.jul,t.ago,t.sete,t.out,t.nov,t.dez,t.tot_ano,t.media
from (select DISTINCT coalesce(nivel1, nivel2, nivel3, nivel4 ,nivel5, nivel6, nivel7, nivel8, nivel9, nivel10, nivel11, nivel12, nivel13, nivel14, nivel15, nivel16, nivel17, nivel18, nivel19, nivel20) codconta,
Nvl(sum(jan),0) jan,
Nvl(sum(fev),0) fev, .....
Coloquei em negrito… ele faz a conta pra mim do que é ativo e passivo… tras o valor perfeitamente…
eu precisaria… incluir uma ultima tabela de saldo…tentei assim, mais da erro:
... to_char(data, 'MM') mes,
sum(case when debito is not null then -valor
when credito is not null then valor end)+O.Dez mov_liq_mes
from (select rpad(codconta, 20, '0') codconta, descricao from cconta c WHERE SubStr(codconta,1,1)='3') c
left join (select rpad(c.codconta,20, '0') codconta, l.*
FROM cLanca L join cConta C
ON L.CodColigada = C.CodColigada
AND (L.Credito = C.CodConta
OR L.Debito = C.CodConta)
[b]join Saldo O
ON O.CodConta = C.CodConta.....[/b]
Em negrito as alteracoes que fiz…
Entao, ele da erro… to tentando incluir mais uma tabela com o join Saldo O…. e depois em cima, somar o valor da tabela Saldo, campo Dez…
+O.Dez….
aonde eu teria que incluir esse join pra poder somar o valor ali?
Valeu..10 de junho de 2010 às 7:18 pm #94517fsitja
ParticipanteVamos por partes 8)
O saldo seria feito através de “UNION ALL” com a tabela de lançamentos.
Mas o valor do saldo seria considerado como indo para qual coluna de mês? Sempre lança em Janeiro o saldo?
10 de junho de 2010 às 7:32 pm #94518MARCIO_LOK
ParticipanteBeleza, vamos resolver primeiramente o problema das contas zeradas que nao é pra ele trazer, pode ser?
Depois a gente ve do saldo…
sobre o saldo……. to querendo descontar de todos os meses…
porque o ativo e o passivo é feito assim,….Janeiro = valor(credito-debito)+saldo anterior
Feveiro = (ValordeJaneiro)+(credito-Debito)
e assim por diante..acredito que se fizer assim..
Pedir pra filtrar o mes <= mes.
Mes=(movimentacao)+Saldo Anteriorobs: Movimentacao seria Credito-Debito da conta…
10 de junho de 2010 às 9:20 pm #94521fsitja
ParticipantePara tirar as contas zeradas é aquilo que o Burga postou, o where onde qualquer uma delas seja diferente de zero (col1 != 0 or col2 != 0 etc). Entendi que tinha funcionado…
O esquema do saldo ainda não caiu a ficha pra mim.
No momento cada coluna de mês exibe o somatório dos lançamentos naquele mês. Não seria só criar uma coluna “Saldo Anterior” e está feito?
DESCRICAO CODCONTA SALDO_ANTERIOR JAN FEV MAR TOT_ANO
1.0.0 1 7000 -27000 -26000 -62000 -115000
1.1.0 11 5000 -30000 -30000 -50000 -110000
1.1.1 111 20000 20000
1.1.2 112 -10000 -10000
1.2.0 12 2000 3000 4000 -12000 -5000
2.0.0 2 1000 600 600
2.1.0 21 500 500
2.1.1 211 300 300
10 de junho de 2010 às 9:49 pm #94522MARCIO_LOK
ParticipanteBom, sobre deixar em branco seria nesta parte aqui…
...from (select DISTINCT coalesce(nivel1, nivel2, nivel3, nivel4 ,nivel5, nivel6, nivel7, nivel8, nivel9, nivel10, nivel11, nivel12, nivel13, nivel14, nivel15, nivel16, nivel17, nivel18, nivel19, nivel20) codconta,
Nvl(sum(jan),0) jan,
Nvl(sum(fev),0) fev,
Nvl(sum(mar),0) mar,
Nvl(sum(abr),0) abr,
Nvl(sum(mai),0) mai,
Nvl(sum(jun),0) jun,
Nvl(sum(jul),0) jul,
Nvl(sum(ago),0) ago,
Nvl(sum(sete),0) sete,
Nvl(sum(out),0) out,
Nvl(sum(nov),0) nov,
Nvl(sum(dez),0) dez,
nvl(sum(tot_ano),0) tot_ano,
Nvl(Round(sum(tot_ano),2),0)/12 media
from mov_mensal
WHERE ( jan !=0 OR fev !=0 OR mar !=0 OR abr !=0 OR mai !=0 OR jun !=0 OR jul !=0 OR ago !=0 OR sete !=0 OR out !=0 OR nov !=0 OR dez !=0)
group by grouping sets ((nivel1), (nivel2), (nivel3), (nivel4),...
É aqui???? Coloquei em negrito a alteração que fiz…
Sobre o esquema do saldo anterior, deixa tentar explicar….
Cada Conta….Cada mes… tem um valor correto?
Eu tenho uma tabela chamada Saldo, ok?
Nela, tem o saldo das contas referentes a dezembro de 2009, correto?vamos para o ano de 2010… que é o que estamos trabalhando…
Com os dados de janeiro de 2010… alem do movimento mensal
que é
... sum(case when debito is not null then -valor
when credito is not null then valor end) mov_liq_mes
....
eu preciso adicionar o valor da tabela saldo… que só tem dois campos…
codconta e valor….dai fevereiro, ficaria…
credito-debito… que é o codigo acima que vc ja desenvolveu, menos o valor de janeiro (ja incluido o saldo anterior)Entendeu?
Por isso eu pensei, em pegar o valor de marco (por exemplo), somar os creditos menos os debitos de janeiro ate marco, e adcionar no final o valor da tabela SALDO, acho que assim funcionaria, entendeu?
11 de junho de 2010 às 12:09 am #94525fsitja
ParticipanteTá, então esclarece mais uma coisa: sendo assim os valores que estão lá hoje não são o que você quer, é pra substituir eles por esse saldo acumulado?
Supondo então os lançamentos que você vê hoje:
Visão de LANÇAMENTOS (como está fazendo atualmente):DESCRICAO CODCONTA SALDO_ANTERIOR JAN FEV MAR TOT_ANO
1.0.0 1 7000 -27000 -26000 -62000 -115000
1.1.0 11 5000 -30000 -30000 -50000 -110000
1.1.1 111 20000 20000
1.1.2 112 -10000 -10000
1.2.0 12 2000 3000 4000 -12000 -5000
2.0.0 2 1000 600 600
2.1.0 21 500 500
2.1.1 211 300 300
Você quer ver esses dados como saldo assim?
DESCRICAO CODCONTA SALDO_ANTERIOR SALDO_JAN SALDO_FEV SALDO_MAR SALDO_DEZ
1.0.0 1 7000 -20000 -46000 -108000 -108000
1.1.0 11 5000 -25000 -55000 -10500 -105000
1.1.1 111 0 0 20000 20000
1.1.2 112 0 0 0 -10000 -10000
1.2.0 12 2000 5000 9000 -3000 -3000
2.0.0 2 1000 1600 1600 1600 1600
2.1.0 21 0 500 500 500 500
2.1.1 211 0 300 300 300 300
Não teria mais “total” no fim pois como já é acumulado o total é o próprio mês de dezembro.
Explicando a primeira linha, da conta 1.0.0:
Em janeiro é saldo inicial (7000) – movimento de janeiro (-27000) = -20000.
Depois no mês de fevereiro fica o -20.000 de janeiro -26.000 de fevereiro = -46.000.
No mês de março é o resultado de fevereiro (-46.000) -62.000 = -108.000
Como no resto do ano não teve mais lançamentos, até dezembro o saldo final fica -108.000 em todos meses. No exemplo não coloquei abril, maio etc mas ficaria -108.000 tb. Correta a forma de calcular?Verifica se é isso por favor, daí dá para partir para a solução.
Quanto a não exibir as linhas com zero, fica mais simples depois de fazer a parte acima, pois se houver saldo inicial diferente de zero em dez/2009, o restante do ano de 2010 sempre vai ser diferente de zero, por ser acumulado… Então nem vai ser preciso mais fazer essa condição.
11 de junho de 2010 às 2:43 am #94529MARCIO_LOK
ParticipanteAmigo, seria isso mesmo….
So que o valor total no final, precisa continuar aparecendo… porque na verdade… ele é a soma da conta…. em todo o periodo…
ou seja…….
conta janeiro fevereiro……. total
0000000345 4 5 9Como ta hoje… do jeito que esta hoje… outra coisa…..
por exemplo… eu tenho… lancamento ate maio de 2010, por exemplo…
junho….julho…etc teria que aparecer zerado… como esta aparecendo no script feito ate agora…sobre o valor aterior, tabela saldo… é exatamente, da forma que vc mostrou…. ele tem que vir tirando mes a mes…. exatamente ….
nos exemplos que vc mostrou… -
AutorPosts
- Você deve fazer login para responder a este tópico.