Como faco para puxar dados do mes anterior
27/08/2007
0
Ola gostaria de saber como faco para puxar dados do mes anterior, caso digite o periodo de 01/02/2006 a 28/02/2006 ele me retorne as informacoes do mes atual e do mes janeiro.
segue a estrutura do sql..
SELECT
´-1´ AS PAGINA,
ISNULL(TABS.MES,0) AS MES,
CREDITO_ANTERIOR,
SUM(ISNULL(BASE_CALCULO,0)) AS BASE_CALCULO,
SUM(ISNULL(TOTAL_SAIDAS,0)) AS TOTAL_SAIDAS,
SUM(BASE_CREDITO) AS BASE_CREDITO
FROM (
SELECT
MES,
SUM(BASE_CALCULO) AS BASE_CALCULO,
SUM(TOTAL_SAIDAS) AS TOTAL_SAIDAS
FROM (
SELECT
--MONTH(S.DATA_EMISSAO)AS MES,
MONTH(S.DATA_REG)AS MES,
SITR.VALOR_BASE AS BASE_CALCULO,
SI.VALOR_ITEM_CONTABIL AS TOTAL_SAIDAS
FROM TBLIVROREGES S
INNER JOIN TBLIVROREGESITEM SI
ON S.CHAVE_FATO = SI.CHAVE_FATO AND
SI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB SITR
ON SI.CHAVE_FATO = SITR.CHAVE_FATO AND
SI.NUM_ITEM = SITR.NUM_ITEM AND
SI.NUM_SUBITEM = SITR.NUM_SUBITEM AND
SITR.COD_IMPOSTO = ´ICMS´
INNER JOIN TBCFOP CFOP
ON CFOP.COD_CFOP = SI.COD_CFOP
INNER JOIN TBLOTEESCRITA LE
ON S.COD_FILIAL = LE.COD_FILIAL AND S.COD_LOTE = LE.COD_LOTE AND LE.TIPO_ES = ´S´
WHERE
S.DATA_REG BETWEEN ´1901-01-01´ AND ´1902-02-02´ AND
CFOP.TIPO_ORIGEM_DESTINO IN (´F´) AND S.STATUS <> ´C´) TABS
GROUP BY MES) TABS
FULL OUTER JOIN
(SELECT
MES,
SUM(BASE_CREDITO) AS BASE_CREDITO,
(SELECT
SUM(isnull(EITR.VALOR_IMPOSTO,0)) AS CREDITO_ANTERIOR --+isnull(EITR.VALOR_OUTRAS,0)) AS CREDITO_ANTERIOR
FROM TBLIVROREGES E
INNER JOIN TBLIVROREGESITEM EI
ON E.CHAVE_FATO = EI.CHAVE_FATO AND
EI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB EITR
ON EI.CHAVE_FATO = EITR.CHAVE_FATO AND
EI.NUM_ITEM = EITR.NUM_ITEM AND
EI.NUM_SUBITEM = EITR.NUM_SUBITEM AND
EITR.COD_IMPOSTO = ´ICMS´
WHERE
E.DATA_REG < ´1901-01-01´ AND
EI.COD_CFOP IN (´PRM1´) AND E.STATUS <> ´C´
) AS CREDITO_ANTERIOR
FROM (
SELECT
MONTH(E.DATA_REG) AS MES,
isnull(EITR.VALOR_IMPOSTO,0) AS BASE_CREDITO --+isnull(EITR.VALOR_OUTRAS,0) AS BASE_CREDITO
FROM TBLIVROREGES E
INNER JOIN TBLIVROREGESITEM EI
ON E.CHAVE_FATO = EI.CHAVE_FATO AND
EI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB EITR
ON EI.CHAVE_FATO = EITR.CHAVE_FATO AND
EI.NUM_ITEM = EITR.NUM_ITEM AND
EI.NUM_SUBITEM = EITR.NUM_SUBITEM AND
EITR.COD_IMPOSTO = ´ICMS´
INNER JOIN TBCFOP CFOP
ON CFOP.COD_CFOP = EI.COD_CFOP
WHERE
E.DATA_REG BETWEEN CAST(CAST(DATEPART(YEAR,´1901-01-01´) AS CHAR (4))+´-01-01´ AS DATETIME) AND ´1902-02-02´ AND
CFOP.Tipo_ES = ´E´ AND EI.COD_CFOP IN (´PRM1´) AND E.STATUS <> ´C´) TABE
GROUP BY MES) TABE
ON TABS.MES = TABE.MES
GROUP BY
TABS.MES,
TABE.CREDITO_ANTERIOR
order by TABS.MES
valewss
segue a estrutura do sql..
SELECT
´-1´ AS PAGINA,
ISNULL(TABS.MES,0) AS MES,
CREDITO_ANTERIOR,
SUM(ISNULL(BASE_CALCULO,0)) AS BASE_CALCULO,
SUM(ISNULL(TOTAL_SAIDAS,0)) AS TOTAL_SAIDAS,
SUM(BASE_CREDITO) AS BASE_CREDITO
FROM (
SELECT
MES,
SUM(BASE_CALCULO) AS BASE_CALCULO,
SUM(TOTAL_SAIDAS) AS TOTAL_SAIDAS
FROM (
SELECT
--MONTH(S.DATA_EMISSAO)AS MES,
MONTH(S.DATA_REG)AS MES,
SITR.VALOR_BASE AS BASE_CALCULO,
SI.VALOR_ITEM_CONTABIL AS TOTAL_SAIDAS
FROM TBLIVROREGES S
INNER JOIN TBLIVROREGESITEM SI
ON S.CHAVE_FATO = SI.CHAVE_FATO AND
SI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB SITR
ON SI.CHAVE_FATO = SITR.CHAVE_FATO AND
SI.NUM_ITEM = SITR.NUM_ITEM AND
SI.NUM_SUBITEM = SITR.NUM_SUBITEM AND
SITR.COD_IMPOSTO = ´ICMS´
INNER JOIN TBCFOP CFOP
ON CFOP.COD_CFOP = SI.COD_CFOP
INNER JOIN TBLOTEESCRITA LE
ON S.COD_FILIAL = LE.COD_FILIAL AND S.COD_LOTE = LE.COD_LOTE AND LE.TIPO_ES = ´S´
WHERE
S.DATA_REG BETWEEN ´1901-01-01´ AND ´1902-02-02´ AND
CFOP.TIPO_ORIGEM_DESTINO IN (´F´) AND S.STATUS <> ´C´) TABS
GROUP BY MES) TABS
FULL OUTER JOIN
(SELECT
MES,
SUM(BASE_CREDITO) AS BASE_CREDITO,
(SELECT
SUM(isnull(EITR.VALOR_IMPOSTO,0)) AS CREDITO_ANTERIOR --+isnull(EITR.VALOR_OUTRAS,0)) AS CREDITO_ANTERIOR
FROM TBLIVROREGES E
INNER JOIN TBLIVROREGESITEM EI
ON E.CHAVE_FATO = EI.CHAVE_FATO AND
EI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB EITR
ON EI.CHAVE_FATO = EITR.CHAVE_FATO AND
EI.NUM_ITEM = EITR.NUM_ITEM AND
EI.NUM_SUBITEM = EITR.NUM_SUBITEM AND
EITR.COD_IMPOSTO = ´ICMS´
WHERE
E.DATA_REG < ´1901-01-01´ AND
EI.COD_CFOP IN (´PRM1´) AND E.STATUS <> ´C´
) AS CREDITO_ANTERIOR
FROM (
SELECT
MONTH(E.DATA_REG) AS MES,
isnull(EITR.VALOR_IMPOSTO,0) AS BASE_CREDITO --+isnull(EITR.VALOR_OUTRAS,0) AS BASE_CREDITO
FROM TBLIVROREGES E
INNER JOIN TBLIVROREGESITEM EI
ON E.CHAVE_FATO = EI.CHAVE_FATO AND
EI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB EITR
ON EI.CHAVE_FATO = EITR.CHAVE_FATO AND
EI.NUM_ITEM = EITR.NUM_ITEM AND
EI.NUM_SUBITEM = EITR.NUM_SUBITEM AND
EITR.COD_IMPOSTO = ´ICMS´
INNER JOIN TBCFOP CFOP
ON CFOP.COD_CFOP = EI.COD_CFOP
WHERE
E.DATA_REG BETWEEN CAST(CAST(DATEPART(YEAR,´1901-01-01´) AS CHAR (4))+´-01-01´ AS DATETIME) AND ´1902-02-02´ AND
CFOP.Tipo_ES = ´E´ AND EI.COD_CFOP IN (´PRM1´) AND E.STATUS <> ´C´) TABE
GROUP BY MES) TABE
ON TABS.MES = TABE.MES
GROUP BY
TABS.MES,
TABE.CREDITO_ANTERIOR
order by TABS.MES
valewss
Dzkbrasil
Curtir tópico
+ 0
Responder
Posts
27/08/2007
Emerson Nascimento
antes que qualquer coisa, vamos tentar simplificar aquela instrução.
teste com esta e veja se obtém o mesmo resultado e se há melhora na performance (não tenho como testar):
teste com esta e veja se obtém o mesmo resultado e se há melhora na performance (não tenho como testar):
SELECT ´-1´ PAGINA, MONTH(LR.DATA_REG) MES, SUM(CASE WHEN CFOP.TIPO_ORIGEM_DESTINO IN (´F´) AND LE.TIPO_ES = ´S´ -- LE.?? não poderia ser LR. ou CFOP.??? THEN LRIT.VALOR_BASE ELSE 0.0 END) BASE_CALCULO, SUM(CASE WHEN CFOP.TIPO_ORIGEM_DESTINO IN (´F´) AND LE.TIPO_ES = ´S´ -- LE.?? não poderia ser LR. ou CFOP.??? THEN LRI.VALOR_ITEM_CONTABIL ELSE 0.0 END) TOTAL_SAIDAS, SUM(CASE WHEN EI.COD_CFOP IN (´PRM1´) AND CFOP.TIPO_ES = ´E´ THEN LRIT.VALOR_IMPOSTO ELSE 0.0 END) BASE_CREDITO, (SELECT SUM(ISNULL(EITR.VALOR_IMPOSTO,0.0)) FROM TBLIVROREGES E INNER JOIN TBLIVROREGESITEM EI ON EI.CHAVE_FATO = E.CHAVE_FATO AND EI.NUM_SUBITEM = 0 INNER JOIN TBLIVROREGESITEMTRB EITR ON EITR.CHAVE_FATO = EI.CHAVE_FATO AND EITR.NUM_ITEM = EI.NUM_ITEM AND EITR.NUM_SUBITEM = EI.NUM_SUBITEM AND EITR.COD_IMPOSTO = ´ICMS´ WHERE E.DATA_REG < ´1901-01-01´ AND E.TIPO_ES = ´E´ AND EI.COD_CFOP IN (´PRM1´) AND E.STATUS <> ´C´ ) CREDITO_ANTERIOR FROM TBLIVROREGES LR INNER JOIN TBLIVROREGESITEM LRI ON LRI.CHAVE_FATO = LR.CHAVE_FATO AND LRI.NUM_SUBITEM = 0 INNER JOIN TBLIVROREGESITEMTRB LRIT ON LRIT.CHAVE_FATO = LRI.CHAVE_FATO AND LRIT.NUM_ITEM = LRI.NUM_ITEM AND LRIT.NUM_SUBITEM = LRI.NUM_SUBITEM AND LRIT.COD_IMPOSTO = ´ICMS´ INNER JOIN TBCFOP CFOP ON CFOP.COD_CFOP = LRI.COD_CFOP LEFT JOIN TBLOTEESCRITA LE -- faz sentido utilizar esta tabela? ON LE.COD_FILIAL = LR.COD_FILIAL AND LE.COD_LOTE = LR.COD_LOTE AND LR.TIPO_ES = ´S´ WHERE LR.DATA_REG BETWEEN ´1901-01-01´ AND ´1902-02-02´ AND LR.STATUS <> ´C´ GROUP BY MONTH(LR.DATA_REG)
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)