Criar Somatorio com Quick Report
Boa Tarde, preciso fazer um relatorio tipo romaneio. Tenho uma tabela "Atendimentos.db" (onde é lançado os tipos de atendimentos) com a seguinte estrutura
ID_Atendimento
Atendimento
EX: ID = 1 | Atendimento = Auxilio Natalidade
ID = 2 | Atendimento = Auxilio Mortalidade
ID = 3 | Atendimento = Regularizaçao de CPF
e outra tabela "Lançamentos"
ID_Lancamento
Data
ID_Familia
ID_Atendimento
EX: ID_Lancamento | Data | ID_Familia | ID_Atendimento
01 | 10/11/2012 | 05 | 01 (Auxilio Natalidade)
02 | 15/11/2012 | 03 | 03 (Regularizaçao de CPF)
03 | 16/11/2012 | 07 | 01 (Auxilio Natalidade)
04 | 20/11/2012 | 02 | 01 (Auxilio Natalidade)
Relatorio sairia assim no intervalo de datas do dia 01/11 a 30/11
Atendimento Qtde
01 - Auxilio Natalidade 03
02 - Auxilio Mortalidade 00
03 - Regularizacao de CPF 01
ID_Atendimento
Atendimento
EX: ID = 1 | Atendimento = Auxilio Natalidade
ID = 2 | Atendimento = Auxilio Mortalidade
ID = 3 | Atendimento = Regularizaçao de CPF
e outra tabela "Lançamentos"
ID_Lancamento
Data
ID_Familia
ID_Atendimento
EX: ID_Lancamento | Data | ID_Familia | ID_Atendimento
01 | 10/11/2012 | 05 | 01 (Auxilio Natalidade)
02 | 15/11/2012 | 03 | 03 (Regularizaçao de CPF)
03 | 16/11/2012 | 07 | 01 (Auxilio Natalidade)
04 | 20/11/2012 | 02 | 01 (Auxilio Natalidade)
Relatorio sairia assim no intervalo de datas do dia 01/11 a 30/11
Atendimento Qtde
01 - Auxilio Natalidade 03
02 - Auxilio Mortalidade 00
03 - Regularizacao de CPF 01
Flavio Prado
Curtidas 0
Respostas
William
21/11/2012
Colega acho q essa instrução SQL já ajuda bastante:
SELECT distinct(A.atendimento), COUNT(L.ID_ATENDIMENTO) FROM atendimento A LEFT JOIN lancamentos L ON A.id_lancamento = L.id_atendimento group BY L.id_atendimento, A.atendimento
GOSTEI 0
Flavio Prado
21/11/2012
Valeu wllfl
deu certinho... muito Obrigado
deu certinho... muito Obrigado
GOSTEI 0
William
21/11/2012
Que bom, precisando estamos por aí!
GOSTEI 0
Flavio Prado
21/11/2012
Só mais uma duvida, e no caso para nao sair os itens que nao foram lancados?? para nao sair com o valor 0?? tipo só os que for >0?? como faço..
GOSTEI 0
William
21/11/2012
Eu montei a instrução desse modo baseado no seu exemplo, mas para retirar esses registros ficaria assim:
Desse modo só serão exibidos os registros q atenderem as condições, do outro modo usando o LEFT ele trazia os registros da tabela do lado esquerdo, mesmo não atendendo as condições.
SELECT distinct(A.atendimento), COUNT(L.ID_ATENDIMENTO) FROM atendimento A INNER JOIN lancamentos L ON A.id_lancamento = L.id_atendimento group BY L.id_atendimento, A.atendimento
Desse modo só serão exibidos os registros q atenderem as condições, do outro modo usando o LEFT ele trazia os registros da tabela do lado esquerdo, mesmo não atendendo as condições.
GOSTEI 0
Flavio Prado
21/11/2012
Bom tenho uma outra duvida agora, queria filtrar por data da tabela lancamentos.db, tentei assim mas nao deu certo
porem da erro
invalid use of keyword
token: select
Line Number:6
with DM.Query1 do
begin
Close;
SQL.Add('select distinct (A.atendimento), (A.data), COUNT(L.id_tipoatendimento) from Atendimentos.db');
SQL.Add('where A.Data >= :dtInicial and A.Data <= :dtFinal');
SQL.Add('A INNER JOIN lancamentos.db L ON A.id_atendimentos = L.id_tipoatendimento');
SQL.Add('group BY L.id_tipoatendimento, A.atendimento');
ParamByName('dtInicial').AsDate := dtInicial.Date;
ParamByName('dtFinal').AsDate := dtFinal.Date;
Open;
end;
porem da erro
invalid use of keyword
token: select
Line Number:6
GOSTEI 0
Claudia Nogueira
21/11/2012
Tem umas coisas invertidas, nem vou testar a sentença, se der outro erro aí você posta.
with DM.Query1 do
begin
Close;
SQL.Add('select distinct (A.atendimento), (A.data), COUNT(L.id_tipoatendimento) from Atendimentos A');
SQL.Add('INNER JOIN lancamentos.db L ON A.id_atendimentos = L.id_tipoatendimento');
SQL.Add('where A.Data >= :dtInicial and A.Data <= :dtFinal');
SQL.Add('group BY L.id_tipoatendimento, A.atendimento');
ParamByName('dtInicial').AsDate := dtInicial.Date;
ParamByName('dtFinal').AsDate := dtFinal.Date;
Open;
end;
GOSTEI 0
Flavio Prado
21/11/2012
Bom pessoal, com a ajuda do William, consegui fazer esse codigo funcionar no delphi:
esse codigo faz o seguinte, pega o id da tabela Atendimento.db e soma quantas vezes foi lançado na tabela Lancamentos.db
agora eu preciso fazer esse somatorio em um período de tempo da tabela de Lancamentos.db, tipo "where data >= DataIni and Data <= DataFim", tentei de varias formas mas nao consegui...
select distinct(A.atendimento), COUNT(L.id_tipoatendimento) FROM atendimentos.db A INNER JOIN lancamentos.db L ON A.id_atendimentos = L.id_tipoatendimento group BY L.id_tipoatendimento, A.atendimento
esse codigo faz o seguinte, pega o id da tabela Atendimento.db e soma quantas vezes foi lançado na tabela Lancamentos.db
agora eu preciso fazer esse somatorio em um período de tempo da tabela de Lancamentos.db, tipo "where data >= DataIni and Data <= DataFim", tentei de varias formas mas nao consegui...
GOSTEI 0