Consulta múltipla SQL no ORACLE
15/06/2011
0
Eu fiz a consulta abaixo:
select f.ID_CONSUMIDOR, c.NOME, f.ID_SERVICO, sum(f.VALOR) as soma from ITENS_FATURA f inner join consumidor con f.ID_CONSUMIDOR = c.ID_CONSUMIDORwhere f.mes_ano = '2011-06-01'group by f.id_consumidor, f.ID_SERVICO, c.nome, f.valororder by f.ID_CONSUMIDOR
Beleza, eu tenho os valores agrupados, e o retorno que eu tenho é esse:
ID NOME ID_servico Valor19 JOSE NONONONONO 1 62.0819 JOSE NONONONONO 2 49.6627 MAURO IAIAIAIAIAIA 1 18.9527 MAURO IAIAIAIAIAIA 2 15.1635 EDSON FULANO 1 16.8286 KKKKKKKKKKKK 5 4.49
Porém, eu preciso agora pegar o valor total da fatura, que contém todos os lançamentos de itens, e subtrair com a soma de cada tipo de serviço por consumidor, tirando do valor da fatura o total de multas e juros que terão o ID_servico 5 e 6. Eu não posso simplesmente lançar na exportação o valor da fatura total com multa e juros pois existe umas regras fiscais que pedem dessa desmembração.
Isso é para uma exportação que o governo exige agora, e para não ter que lançar todo mês na contabilidade manualmente (seria impossível), queria fazer um sistema em C# que automatizasse isso, por mês.Eu pensei em fazer essa consulta, jogar numa tabela como a abaixo:
Tabelacampo tipo id_consumidor numericovalor_fatura moedavalor_id_5 moedavalor_id_6 moedavalor_id_22 moedavalor_total_5 moedavalor_total_6 moedavalor_total_22 moeda
E depois fazer alguma outra programação para apresentar a exportação separada.
Alguém tem uma luz , alguma orientação pra me dar, agradeço de antemão.
Desculpem o tamanho do post mas pensei em explicar o máximo para poder entenderem minha dúvida.
Fábio. ;)
Fábio Paula
Posts
15/06/2011
Rafael Mattos
eu não faria assim pq futuramente pode aparecer outros ID
eu faria assim
--------------------------------------
campo
id_consumidor numerico
data date
valor_fatura moeda
idservico numeric
valor_total moeda
--------------------------------------
eu alimentaria pela trigger, depois é só fazer um select por data que
vc pega o que vc quer
15/06/2011
Fábio Paula
eu não faria assim pq futuramente pode aparecer outros ID
eu faria assim
--------------------------------------
campo
id_consumidor numerico
data date
valor_fatura moeda
idservico numeric
valor_total moeda
--------------------------------------
eu alimentaria pela trigger, depois é só fazer um select por data que
vc pega o que vc quer
Rafael, obrigado por responder... Eu pensei também nos campos com nome especifico, eu coloquei daquela maneira para explicar ao máximo.
Meu modo de pensar está correto?
Porém, o que você quis dizer com "eu alimentaria pela trigger"? Não possuo um conhecimento muito amplo em SQL, além do que eu corro atras em fórum da net...Poderia me explicar isso?
Abraços,
Fábio.
15/06/2011
Rafael Mattos
http://www.linhadecodigo.com.br/artigo/2821/Trigger-Oracle-B%C3%A1sico.aspx
--------------------------------------------
para isso eu teria que conhecer mais sobre a estruturas da sua tabela.
mas vamos la vc teria que criar um trigger na After Insert da ITENS_FATURA alimentando essa tabela auxiliar,
seria bom vc acrecentar mais esses 2 campos ainda
id_itens_fatura numerica
id_fatura numerico
id_consumidor numerico
data date
valor_fatura moeda
idservico numeric
valor_total moeda
-----------------------------------------------
serial algo mais ou menos assim
CREATE OR REPLACE TRIGGER trg_itens_fatura
BEFORE INSERT
ON itens_fatura
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
INSERT INTO TABELA_AUXILIAR (id_itens_fatura
id_fatura ,
id_consumidor,
data ,
valor_fatura,
idservico ,
valor_total)
VALUES (NEW.IDITENSFATURA, NEW.FATURA, NEW.IDCONSUMIDOR, NEW.DATA, NEW.VALOR_FATURA,NEW.TOTAL);
END IF;
END;
é que trabalho com firebird mais a ideia do funcionamento da trigger é a mesma
--------------------------------------------------------------------------------
Blog: http://mundodoprogramador.wordpress.com/
MSN: rafmattos@hotmail.com
Twitter: _rafmattos
15/06/2011
Fábio Paula
Pense no seguinte agora, por favor:
No primeiro select que eu executei, eu ordenei todos os lançamentos que o consumidor pode ter em sua conta, exemplificando melhor:
Id_Servico:
1 = valor base 5 = multa 6 = juros 9 = segunda via
Percebeu que mostra por consumidor o total de cada servico? o total do codigo 5 numa linha, o total do codigo 6 na outra e assim por diante?
Agora, na tabela nova afetada pelo "trigger" precisaria mostrar assim:
-------------------------------------------------Tabela Itens_Exportacao_TEMP
id_itens_fatura id_consumidor data id_servico valor_total 1 001 13/06/2011 1 10.00 2 001 13/06/2011 5 1.003 001 15/06/2011 6 2.004 002 15/06/2011 1 10.005 ...6 ...----------------------------------------------------
Pra que? Pra fazer o cálculo: valor_correto = valor_fatura - (multa +juros)...
Com isso eu gero o campo valor_correto, possivelmente uma outra tabela que receberá o seguinte definitivo:
--------------------------------------Tabela ITENS_EXPORTACAO
id_itens_fatura id_consumidor data valor_fatura valor_multa valor_juros valor_correto 1 001 16/06/2011 13.00 1.00 2.00 10.002 002 16/06/2011 21.00 10.00 1.00 10.003 003 16/06/2011 60.00 22.00 30.00 18.004 004 16/06/2011 14.00 3.00 1.00 10.00------------------------------------------
Porque assim? Porque eu preciso jogar os dados segmentados num layout txt para que possa ser importado por um sistema de contabilidade.
Acredito eu que preciso de dois triggers, correto? Um "depois" de inserir na itens_fatura e um "depois" de inserir na itens_exportacao_temp, gerando a itens_exportacao prontinha... Me corrija se estiver errado
Conseguiu me entender?
Abraços,
Fábio.
Clique aqui para fazer login e interagir na Comunidade :)