Somar excedente de ontem com o de hoje

SQL Server

17/04/2013

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

Curtidas 0

Respostas

Alex Lekao

Alex Lekao

17/04/2013

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
GOSTEI 0
Pjava

Pjava

17/04/2013

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.
GOSTEI 0
Alex Lekao

Alex Lekao

17/04/2013

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.
GOSTEI 0
Alex Lekao

Alex Lekao

17/04/2013

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'
GOSTEI 0
Pjava

Pjava

17/04/2013

vou testar e postar o resultado
GOSTEI 0
Alex Lekao

Alex Lekao

17/04/2013

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.
GOSTEI 0
Pjava

Pjava

17/04/2013

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

GOSTEI 0
Alex Lekao

Alex Lekao

17/04/2013

blz...

obrigado por compartilhar a solução.

abraco.

Alex - Lekao
GOSTEI 0
José

José

17/04/2013

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