Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Calcular quantidade diario em determinado Mes


Flavio P. Lima

Pergunta

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

Posts Recomendados

  • 0
Brow,, se entendi,,, acho que é só fazer um select com sum ( coluna ) , data ... e dar um group by por data

a 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 periodo

sera q é possivel?

Editado por Flavio P. Lima
Link para o comentário
Compartilhar em outros sites

  • 0
Então,,, é só fazer o que eu fiz,,,, qualquer coisa posta seu código que reformulo

entã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 por Flavio P. Lima
Link para o comentário
Compartilhar em outros sites

  • 0
Então,,, é só fazer o que eu fiz,,,, qualquer coisa posta seu código que reformulo

entã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 tudo

mas não consigoooooooooooooooooooooooooooooooooooooooo

Link para o comentário
Compartilhar em outros sites

  • 0
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_date

COM ESSE COGICO EU CONSIGO ESSE RESULTADO:

3/5/2010 1

3/5/2010 1

3/5/2010 1

3/5/2010 1

3/5/2010 1

3/5/2010 1

3/5/2010 1

3/5/2010 1

3/5/2010 1

3/5/2010 1

3/5/2010 1

4/5/2010 1

4/5/2010 1

4/5/2010 1

4/5/2010 1

4/5/2010 1

4/5/2010 1

4/5/2010 1

4/5/2010 1

4/5/2010 1

4/5/2010 1

4/5/2010 1

5/5/2010 1

5/5/2010 1

5/5/2010 1

5/5/2010 1

5/5/2010 1

5/5/2010 1

5/5/2010 1

É QUASE ISSO QUE EU PRECISO. AGORA PRECISO AGRUPAR AS DATAS E MOSTRAR A SOMA DAS DATAS EX:

4/5/2010 22

Link para o comentário
Compartilhar em outros sites

  • 0

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 por fernandomsv
Link para o comentário
Compartilhar em outros sites

  • 0

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:

SELECT

mdb.casd.cr.open_date,

count(mdb.casd.cr.ref_num), sum (mdb.casd.cr.ref_num)

Link para o comentário
Compartilhar em outros sites

  • 0
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:

SELECT

mdb.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....

Link para o comentário
Compartilhar em outros sites

  • 0
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:

SELECT

mdb.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 possivel

At.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0
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 objeto

Data 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

Link para o comentário
Compartilhar em outros sites

  • 0

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))

Link para o comentário
Compartilhar em outros sites

  • 0
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...

Link para o comentário
Compartilhar em outros sites

  • 0
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 invalida

alguma dica?

Vlw

Link para o comentário
Compartilhar em outros sites

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0

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.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))

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...

Link para o comentário
Compartilhar em outros sites

  • 0

Fulviooooooooooooooooooooooooooooooooooo

Consegui 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???

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...