Somar excedente de ontem com o de hoje

17/04/2013

0

Tenho esse select:

WITH
CTE_A AS
(SELECT CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_CADASTRO)))AS DT_CADASTRO,
COUNT(*) AS QTDEA FROM TBL_TRIAGEM
WHERE ID_TIPO_DOCUMENTO IN(2,3,4,9) AND CONVERT(VARCHAR(10),DT_CADASTRO,103) BETWEEN '06/04/2013' AND '25/04/2013'
GROUP BY CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_CADASTRO)))) ,
CTE_B AS
(SELECT CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_LANCAMENTO)))AS DT_LANCAMENTO,
COUNT(*) AS QTDEB FROM TBL_CADASTRO WHERE CONVERT(VARCHAR(10),DT_LANCAMENTO,103)
BETWEEN '06/04/2013' AND '25/04/2013'
GROUP BY CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_LANCAMENTO))))

SELECT
CONVERT(VARCHAR,A.DT_CADASTRO,103)AS DATA,A.QTDEA, B.QTDEB, -(A.QTDEA - B.QTDEB) AS DIFERENCA,
(A.QTDEA - B.QTDEB) AS EXCEDENTE,(B.QTDEB/2) AS MEDIA
FROM
CTE_A AS A CROSS JOIN CTE_B AS B
WHERE
CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),A.DT_CADASTRO))) =
CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),B.DT_LANCAMENTO)))

Gostaria de fazer o seguinte. Somar o excedente de ontem com o excedente de hoje. Não sei como faço isso.
Pjava

Pjava

Responder

Posts

17/04/2013

Alex Lekao

ola Boa tarde!!!

Como vc precisaria que ficasse o resultado dos selects?

vc vai utilizar isto com algum tipo de filtro?

cara eu tenho algo parecido que uso aqui na empresa mas não sei se resolveria para vc.

me passe mais alguns detalhes e vamos ver o que conseguimos.

Abraco.

Alex - Lekao
Responder

17/04/2013

Pjava

Os filtros são os periodos de datas que já são passados nas querys. O resultado é o somatório dos counts que entraram, os mesmos que estão nas querys. Não sei se é isso q vc quer.
Responder

18/04/2013

Alex Lekao

então dependendo do que for, vc vai usar uma opção de count com data menor que hoje, e pode fazer um subselect com data ate hoje e fazer o processo de subtração de um pelo outro.

ve se consegue algo assim, vou ver se consigo o meu código para postar aqui para vc ter um norte.
Responder

18/04/2013

Alex Lekao

Da uma olhada se estes códigos te ajudam a ter uma ideia.

select
COUNT(*) as atehoje
from venda
where tipovda = 'VD'
and datemi between '01.04.2013' and '18.04.2013'

======================================================

select
COUNT(*) atehoje,
(select
COUNT(*)
from venda
where tipovda = 'VD'
and datemi between '01.04.2013' and '17.04.2013') as ateontem
from venda
where tipovda = 'VD'
and datemi between '01.04.2013' and '18.04.2013'

======================================================

select
COUNT(*)-
(select
COUNT(*)
from venda
where tipovda = 'VD'
and datemi between '01.04.2013' and '17.04.2013') as diferenca
from venda
where tipovda = 'VD'
and datemi between '01.04.2013' and '18.04.2013'

======================================================

select
COUNT(*)+
(select
COUNT(*)
from venda
where tipovda = 'VD'
and datemi between '18.04.2013' and '18.04.2013') as acumulado
from venda
where tipovda = 'VD'
and datemi between '01.04.2013' and '17.04.2013'
Responder

18/04/2013

Pjava

vou testar e postar o resultado
Responder

18/04/2013

Alex Lekao

blz...

eu estive relendo o post e vi que oque vc quer eh outra coisa... mas acredito que já deva para ter uma ideia.

vamos ver ate onde conseguimos chegar.
Responder

18/04/2013

Pjava

Resolvi assim:

WITH
CTE_A AS
(SELECT
CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_CADASTRO)))AS DT_CADASTRO,COUNT(*) AS QTDEA
FROM TBL_TRIAGEM
WHERE ID_TIPO_DOCUMENTO IN(2,3,4,9) AND CONVERT(VARCHAR(10),DT_CADASTRO,103)
BETWEEN '09/04/2013' AND '18/04/2013'
GROUP BY
CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_CADASTRO)))) ,
CTE_B AS
(SELECT CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_LANCAMENTO)))AS DT_LANCAMENTO,
COUNT(*) AS QTDEB
FROM TBL_CADASTRO
WHERE CONVERT(VARCHAR(10),DT_LANCAMENTO,103)
BETWEEN '09/04/2013' AND '18/04/2013'
GROUP BY CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_LANCAMENTO)))), CTE_R AS ( SELECT CONVERT(VARCHAR, A.DT_CADASTRO, 103) AS DATA, A.QTDEA, B.QTDEB, -(A.QTDEA - B.QTDEB) AS DIFERENCA, (A.QTDEA - B.QTDEB) AS EXCEDENTE, (B.QTDEB/2) AS MEDIA, ROW_NUMBER() OVER(ORDER BY A.DT_CADASTRO) as RowNum FROM CTE_A AS A INNER JOIN CTE_B AS B ON A.DT_CADASTRO = B.DT_LANCAMENTO ) SELECT H.*, H.EXCEDENTE + COALESCE(O.EXCEDENTE, 0) AS EXCEDENTEACUMULADO FROM CTE_R AS H LEFT JOIN CTE_R AS O ON O.ROWNUM = H.ROWNUM - 1

Responder

18/04/2013

Alex Lekao

blz...

obrigado por compartilhar a solução.

abraco.

Alex - Lekao
Responder

17/08/2013

José

Já que a duvida foi sanada, e a solução compartilhada com os demais usuários, estou dando o tópico por concluído.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar