Flavio P. Lima Postado Junho 1, 2010 Denunciar Share Postado Junho 1, 2010 Galera, a duvida é a seguinte:Preciso criar em SQL uma consulta q faça o calculculo da quantidade diaria e mostre isso em um determinado periodoPara melhor entender, vou explicar: preciso criara query para a quantidade de chamados pendentes no dia, depois mostrar isso em um periodo.o que eu já consegui é a quantidade total no periodo, e a quantidade mostrada de 1 a 1, repetindo o dia.o que preciso édia 5 12dia 6 5dia 7 1dia 8 3dia 9 16espero que tenham entendido e possam me ajudarobrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fernandomsv Postado Junho 1, 2010 Denunciar Share Postado Junho 1, 2010 Brow,, se entendi,,, acho que é só fazer um select com sum ( coluna ) , data ... e dar um group by por data Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 1, 2010 Autor Denunciar Share Postado Junho 1, 2010 (editado) Brow,, se entendi,,, acho que é só fazer um select com sum ( coluna ) , data ... e dar um group by por dataa Ideia que eu tive é fazer uma consulta dentro da outra, tipo assim:uma faz o sum da quantidade no dia, e a outra mostra a quantidade de cada dia no periodo selecionado, pois eu só preciso mostrar o total do dia no periodosera q é possivel? Editado Junho 1, 2010 por Flavio P. Lima Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fernandomsv Postado Junho 1, 2010 Denunciar Share Postado Junho 1, 2010 (editado) Então,,, é só fazer o que eu fiz,,,, qualquer coisa posta seu código que reformuloSó que pra uma coluna voce usa o SUM e pra outra coluna, você subtrai ( datediff )Se for o que entendi o que você quer Editado Junho 1, 2010 por fernandomsv Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 1, 2010 Autor Denunciar Share Postado Junho 1, 2010 (editado) Então,,, é só fazer o que eu fiz,,,, qualquer coisa posta seu código que reformuloentão fernando, meu problema é q estou trabalhando na camada de objeto.vou explicar: O valor total eu tiro de outras duas consultas:count(mdb.casd.cr.ref_num)where( mdb.casd.crs.sym = 'Resolvido') or (mdb_casd_crs_TST.sym = 'Pendente')e o valor que é gerado dessa acima, eu qro dividir por dias, mas quando tento fazer como você me passou o B.O não entende!vou postar o sql do q da erro. Editado Junho 1, 2010 por Flavio P. Lima Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 1, 2010 Autor Denunciar Share Postado Junho 1, 2010 Então,,, é só fazer o que eu fiz,,,, qualquer coisa posta seu código que reformuloentão fernando, meu problema é q estou trabalhando na camada de objeto.vou explicar: O valor total eu tiro de outras duas consultas:count(mdb.casd.cr.ref_num)where( mdb.casd.crs.sym = 'Resolvido') or (mdb_casd_crs_TST.sym = 'Pendente')e o valor que é gerado dessa acima, eu qro dividir por dias, mas quando tento fazer como você me passou o B.O não entende!vou postar o sql do q da erro.bom, acho q agora consigo te explicar o campo q gera o total é um count de um campo numerico TICKET, a ideia seria fazer um cont com data e um sum disso tudomas não consigoooooooooooooooooooooooooooooooooooooooo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 1, 2010 Denunciar Share Postado Junho 1, 2010 Boa tarde Flávio, Posta alguns dados para exemplificar (como eles estão). Ai você fala o que deseja como resultado, ok? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 1, 2010 Autor Denunciar Share Postado Junho 1, 2010 Boa tarde Flávio, Posta alguns dados para exemplificar (como eles estão). Ai você fala o que deseja como resultado, ok?então galera, SELECT mdb.casd.cr.open_date, count(mdb.casd.cr.ref_num)FROM mdb.casd.cr, mdb.casd.crs WHERE ( mdb.casd.zcelula.id=mdb.casd.cr.zcelula ) AND ( mdb.casd.crs.code=mdb.casd.cr.status ) AND ( ( mdb.casd.crs.code=mdb.casd.cr.status ) AND ( mdb.casd.crs.sym = 'Resolvido') or (mdb.casd.crs.sym = 'Pendente') ) AND ( ( mdb.casd.cr.open_date ) BETWEEN @Prompt('Data de Abertura','D', , mono, free) and @Prompt('Data de Fechamento','D', , mono, free) )GROUP BY mdb.casd.cr.open_dateCOM ESSE COGICO EU CONSIGO ESSE RESULTADO: 3/5/2010 13/5/2010 13/5/2010 13/5/2010 13/5/2010 13/5/2010 13/5/2010 13/5/2010 13/5/2010 13/5/2010 13/5/2010 14/5/2010 14/5/2010 14/5/2010 14/5/2010 14/5/2010 14/5/2010 14/5/2010 14/5/2010 14/5/2010 14/5/2010 14/5/2010 15/5/2010 15/5/2010 15/5/2010 15/5/2010 15/5/2010 15/5/2010 15/5/2010 1É QUASE ISSO QUE EU PRECISO. AGORA PRECISO AGRUPAR AS DATAS E MOSTRAR A SOMA DAS DATAS EX: 4/5/2010 22 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fernandomsv Postado Junho 1, 2010 Denunciar Share Postado Junho 1, 2010 (editado) Antes de mais nada, só pra lhe ajudar... Você fez o teste no software,,, está certa esta quantidade de registros, ou seja, tem 11 registros do dia 4 ? Não está fazendo produto cartesiano ? Não estou subestimando,,, apenas ajudar..... Editado Junho 1, 2010 por fernandomsv Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 1, 2010 Denunciar Share Postado Junho 1, 2010 Não entendi uma coisa: Perceba que as primeiras datas (3/5/2010) repetem várias vezes (como as outras). Por que desta repetição, uma vez que você está fazendo o agrupamento por data? O que retorna se colocar a coluna SUM:SELECTmdb.casd.cr.open_date,count(mdb.casd.cr.ref_num), sum (mdb.casd.cr.ref_num) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 1, 2010 Autor Denunciar Share Postado Junho 1, 2010 Antes de mais nada, só pra lhe ajudar... Você fez o teste no software,,, está certa esta quantidade de registros, ou seja, tem 11 registros do dia 4 ? Não está fazendo produto cartesiano ? Não estou subestimando,,, apenas ajudar.....A quantidade é essa mesmo Fernando Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 2, 2010 Autor Denunciar Share Postado Junho 2, 2010 Antes de mais nada, só pra lhe ajudar... Você fez o teste no software,,, está certa esta quantidade de registros, ou seja, tem 11 registros do dia 4 ? Não está fazendo produto cartesiano ? Não estou subestimando,,, apenas ajudar.....A quantidade é essa mesmo Fernandopessoalalgum HELP????VLW Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 2, 2010 Denunciar Share Postado Junho 2, 2010 Não entendi uma coisa: Perceba que as primeiras datas (3/5/2010) repetem várias vezes (como as outras). Por que desta repetição, uma vez que você está fazendo o agrupamento por data? O que retorna se colocar a coluna SUM:SELECTmdb.casd.cr.open_date,count(mdb.casd.cr.ref_num), sum (mdb.casd.cr.ref_num) Bom dia Flávio, Ontem postei uma dúvida em relação ao script.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 2, 2010 Autor Denunciar Share Postado Junho 2, 2010 Não entendi uma coisa: Perceba que as primeiras datas (3/5/2010) repetem várias vezes (como as outras). Por que desta repetição, uma vez que você está fazendo o agrupamento por data? O que retorna se colocar a coluna SUM:SELECTmdb.casd.cr.open_date,count(mdb.casd.cr.ref_num), sum (mdb.casd.cr.ref_num)Essa repetição acontece porque ele puxa os tickets e mostra a data de abertura de cada um deles.não sei se isso é possivel: podiamos puxar o a quantidade dos tickets e fazer com que o SQL mostre a data. sera possivelAt. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 2, 2010 Denunciar Share Postado Junho 2, 2010 Sim, mas a data não poderia estar repetindo porque o script está com a cláusula GROUP BY (na data). Sendo assim, as datas não podiam se repetir. A menos que as datas estejam com as horas também.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 2, 2010 Autor Denunciar Share Postado Junho 2, 2010 Sim, mas a data não poderia estar repetindo porque o script está com a cláusula GROUP BY (na data). Sendo assim, as datas não podiam se repetir. A menos que as datas estejam com as horas também....puts é isso mesmo cara...sabe se existe alguma maneira de eliminar o horario da consulta???? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 2, 2010 Denunciar Share Postado Junho 2, 2010 Ahm... agora sim... rs. Seguinte: o seu GROUP BY está: GROUP BY mdb.casd.cr.open_date Antes de agrupar, você vai converter a data em string, pegando as 10 posições iniciais (aaaa-mm-dd). Ficaria assim: GROUP BY (convert (varchar(10), mdb.casd.cr.open_date, 102)) Não esquece dos parênteses, senão dá erro. Testa aí e depois me fala se funcionou. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 7, 2010 Autor Denunciar Share Postado Junho 7, 2010 Ahm... agora sim... rs. Seguinte: o seu GROUP BY está: GROUP BY mdb.casd.cr.open_date Antes de agrupar, você vai converter a data em string, pegando as 10 posições iniciais (aaaa-mm-dd). Ficaria assim: GROUP BY (convert (varchar(10), mdb.casd.cr.open_date, 102)) Não esquece dos parênteses, senão dá erro. Testa aí e depois me fala se funcionou.Pessoal, nada ainda, deu erro!!Vou tentar explicar campo a campo como cada um é.eu qro o total de chamados enviados nos dias de um periodo correto.os campos que eu tenho no meu sistemas são:N° do Ticket (ref_num) - tipo objetoData de abertura(Open_date) - tipo Data e encima do compo ref_num criei um campo count:count(mdb.casd.cr.ref_num) where ( mdb.casd.crs.code=mdb.casd.cr.status ) AND ( mdb.casd.crs.sym = 'Resolvido') or (mdb_casd_crs_TST.sym = 'Pendente')agora o q eu preciso é uma forma de criar de criar um campo que mostre o total de tickets pendentes por dia em um determinado periodo.Vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 7, 2010 Denunciar Share Postado Junho 7, 2010 Bom dia Flávio, As coisas estão um pouco complicadas.... rs. Fiz um exemplo logo abaixo. Dê uma olhada. Criei duas temporárias e fiz alguns selects para identificar as diferenças. Todos os selects estão explicados.Outra coisa: na sua cláusula OR, creio que está faltando um parênteses.... dê uma olhada nisso também. Caso não seja isto, pode postar!! :.) Exemplo:-- cria temporária create table #crs (code int, sym varchar(10)) create table #cr (status int, ref_num int, Open_date datetime) -- insere valores nas temporárias insert into #crs values (100, 'Resolvido') insert into #cr values (100, 1, getdate()) insert into #crs values (150, 'Resolvido') insert into #cr values (150, 1, getdate()) insert into #crs values (350, 'Resolvido') insert into #cr values (350, 1, getdate()) insert into #crs values (360, 'Pendente') insert into #cr values (360, 1, getdate()) -- Conferência select * from #crs select * from #cr -- neste select, está faltando os parênteses select count(r.ref_num) from #crs s, #cr r where(s.code=r.status) AND (s.sym = 'Resolvido') or (s.sym = 'Pendente') -- é o mesmo select, agora com o parênteses concatenando o OR select count(r.ref_num) from #crs s, #cr r where(s.code=r.status) AND ((s.sym = 'Resolvido') or (s.sym = 'Pendente')) -- Neste select, acrescentei a data. Perceba que o count não funciona, pois a data tem horas. select r.Open_date, count(r.ref_num) from #crs s, #cr r where(s.code=r.status) AND ((s.sym = 'Resolvido') or (s.sym = 'Pendente')) group by r.Open_date -- Neste select, corrigi o count retirando as horas da data. select (convert (varchar(10), r.open_date, 102)), count(r.ref_num) from #crs s, #cr r where(s.code=r.status) AND ((s.sym = 'Resolvido') or (s.sym = 'Pendente')) group by (convert (varchar(10), r.open_date, 102)) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 7, 2010 Autor Denunciar Share Postado Junho 7, 2010 Bom dia Flávio, As coisas estão um pouco complicadas.... rs. Fiz um exemplo logo abaixo. Dê uma olhada. Criei duas temporárias e fiz alguns selects para identificar as diferenças. Todos os selects estão explicados.Outra coisa: na sua cláusula OR, creio que está faltando um parênteses.... dê uma olhada nisso também. Caso não seja isto, pode postar!! :.) Exemplo:-- cria temporária create table #crs (code int, sym varchar(10)) create table #cr (status int, ref_num int, Open_date datetime) -- insere valores nas temporárias insert into #crs values (100, 'Resolvido') insert into #cr values (100, 1, getdate()) insert into #crs values (150, 'Resolvido') insert into #cr values (150, 1, getdate()) insert into #crs values (350, 'Resolvido') insert into #cr values (350, 1, getdate()) insert into #crs values (360, 'Pendente') insert into #cr values (360, 1, getdate()) -- Conferência select * from #crs select * from #cr -- neste select, está faltando os parênteses select count(r.ref_num) from #crs s, #cr r where(s.code=r.status) AND (s.sym = 'Resolvido') or (s.sym = 'Pendente') -- é o mesmo select, agora com o parênteses concatenando o OR select count(r.ref_num) from #crs s, #cr r where(s.code=r.status) AND ((s.sym = 'Resolvido') or (s.sym = 'Pendente')) -- Neste select, acrescentei a data. Perceba que o count não funciona, pois a data tem horas. select r.Open_date, count(r.ref_num) from #crs s, #cr r where(s.code=r.status) AND ((s.sym = 'Resolvido') or (s.sym = 'Pendente')) group by r.Open_date -- Neste select, corrigi o count retirando as horas da data. select (convert (varchar(10), r.open_date, 102)), count(r.ref_num) from #crs s, #cr r where(s.code=r.status) AND ((s.sym = 'Resolvido') or (s.sym = 'Pendente')) group by (convert (varchar(10), r.open_date, 102))Fulvio, vai ver é porque eu não estou usando o SQL server e sim, uma ferramenta da SAP, o BO - Business Object XI e trabalho com as tabelas na camada de objeto... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 7, 2010 Denunciar Share Postado Junho 7, 2010 Ai eu já não.... faz os testes com o script que te passei utilizando esta ferramenta. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 7, 2010 Autor Denunciar Share Postado Junho 7, 2010 Ai eu já não.... faz os testes com o script que te passei utilizando esta ferramenta.Fulvio, funcionou finalmente!mas agora só não estou conseguindo fazer a conversao da data para remover a hora!assim, eu coloco a maneira q você me passou, mas da um erro e diz q falta uma uma coluna, coluna invalidaalguma dica?Vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 7, 2010 Denunciar Share Postado Junho 7, 2010 beleza.... você está referenciando uma coluna q não existe. Verifique se a coluna está na tabela referenciada; ou se tem algum erro na digitação; ou pode ser no referenciamento da coluna no group by. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 8, 2010 Autor Denunciar Share Postado Junho 8, 2010 beleza.... você está referenciando uma coluna q não existe. Verifique se a coluna está na tabela referenciada; ou se tem algum erro na digitação; ou pode ser no referenciamento da coluna no group by.Fulvio, estamos quase la!!!!!!!!!! :rolleyes: SELECT (convert (varchar(10),mdb.casd.cr.open_date)), count(mdb.casd.cr.ref_num) FROM mdb.casd.cr, mdb.casd.crs WHERE ( mdb.casd.crs.code=mdb.casd.cr.status ) AND ( ((mdb.casd.crs.sym = 'Resolvido') or (mdb.casd.crs.sym = 'Pendente')) ) GROUP BY (convert (varchar(10),mdb.casd.cr.open_date)) essa query esta funcionando mas puxa os dados repetidos. quado coloco (convert (varchar(10),mdb.casd.cr.open_date, 102))ele da aquele erro de TIPO DE COLUNA INVALIDA.alguma ideia?vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 8, 2010 Denunciar Share Postado Junho 8, 2010 Bom dia Flávio, Aos poucos a gente consegue... rs. Quando colocar a sintaxe (convert (varchar(10),mdb.casd.cr.open_date, 102)), não coloque somente no select. Perceba q sua query funciona porque a sintaxe (convert (varchar(10),mdb.casd.cr.open_date)) está igual no select e no Group By, ok? Perceba:SELECT (convert (varchar(10),mdb.casd.cr.open_date)), count(mdb.casd.cr.ref_num) FROM mdb.casd.cr, mdb.casd.crsWHERE ( mdb.casd.crs.code=mdb.casd.cr.status ) AND ( ((mdb.casd.crs.sym = 'Resolvido') or (mdb.casd.crs.sym = 'Pendente')) )GROUP BY (convert (varchar(10),mdb.casd.cr.open_date)) Por que está dando erro? porque para o sql, a função de agregação está com tipos diferentes. Sendo assim, terá que trocar nos dois pontos da query. Ficaria assim:SELECT (convert (varchar(10),mdb.casd.cr.open_date, 102)) count(mdb.casd.cr.ref_num) FROM mdb.casd.cr, mdb.casd.crs WHERE ( mdb.casd.crs.code=mdb.casd.cr.status ) AND ( ((mdb.casd.crs.sym = 'Resolvido') or (mdb.casd.crs.sym = 'Pendente')) ) GROUP BY (convert (varchar(10),mdb.casd.cr.open_date, 102)) Vê se roda... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio P. Lima Postado Junho 8, 2010 Autor Denunciar Share Postado Junho 8, 2010 FulvioooooooooooooooooooooooooooooooooooConsegui cara!!!!!!!!!!!SELECT CONVERT(varchar(10), DATEADD(s, a.open_date,CONVERT(varchar(10),'1970-01-01', 102)), 103) AS Data_Abertura, count(a.ref_num) FROM call_req a, cr_stat b WHERE ( b.code=a.status ) AND ( ((b.sym = 'Resolvido') or (b.sym = 'Pendente')) ) GROUP BY CONVERT(varchar(10), DATEADD(s, a.open_date,CONVERT(varchar(10),'1970-01-01', 102)), 103)peguei algumas queres que tinha aqui e juntei com o q você me passou e deu nisso ai!!!!FUNCIONOU PERFEITAMENTE NO SQL...Agora sera q você consegue me ajudar a passar esse codigo pra camada de objeto??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Flavio P. Lima
Galera, a duvida é a seguinte:
Preciso criar em SQL uma consulta q faça o calculculo da quantidade diaria e mostre isso em um determinado periodo
Para melhor entender, vou explicar: preciso criara query para a quantidade de chamados pendentes no dia, depois mostrar isso em um periodo.
o que eu já consegui é a quantidade total no periodo, e a quantidade mostrada de 1 a 1, repetindo o dia.
o que preciso é
dia 5 12
dia 6 5
dia 7 1
dia 8 3
dia 9 16
espero que tenham entendido e possam me ajudar
obrigado
Link para o comentário
Compartilhar em outros sites
28 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.