Ir para conteúdo
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×
Quer acesso a todas as Áreas do Fórum, até aquelas só para membros VIPs? Também quer poder baixar qualquer ARQUIVO? ×

Relatório De Compra De Itens Por Mês (RESOLVIDO)


Antony

Posts Recomendados


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

Bom dia a Todos

Alguém teria algum relatório que trousesse a quantidade de itens comprados de um um periodo de um ano que as quebras dos itens fossem por mês exemplo

descrição Janeiro quant. Fevereiro quant. Março quant. abril Qaunt

rolamento 5 10 12 10

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

Montei esta sentença que retorna o mês de Janeiro com valor 1 e Fevereiro com valor 2 . Tem como através de case transformar o valor 1 em 'Janeiro' e quando for 2 'Fevereiro' ?

select

c.codigoreduzido,

c.nomefantasia,

sum ( a.quantidade) as quant,

a.codund,

datepart(month,b.dataemissao) as mes,

from

titmmov a (nolock)

left outer join tmov b on b.codcoligada = a.codcoligada and

b.idmov = a.idmov

left outer join tprd c on c.codcoligada = a.codcoligada and

c.idprd = a.idprd

left outer join ttb4 e on e.codcoligada = c.codcoligada and

e.codtb4fat = c.codtb4fat

where

a.codcoligada ='1'

and b.status = 'f'

and b.dataemissao >=:data_inicial

and b.dataemissao <=:data_final

and b.codtmv =:codtmv_s

group by

c.codigoreduzido,

c.nomefantasia,

b.codtmv,

a.codund,

b.dataemissao

order by

c.nomefantasia

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  1.140
  • Conteúdo/Dia:  0.21
  • Reputação:   60
  • Pontos/Conquistas:  6.161
  • Conteúdo Resolvido:  0
  • Dias Ganho:  33
  • Status:  Offline
  • Idade:  42
  • Dispositivo:  Windows

Se pode usar o Case when pra fazer isso

case when datepart(month,b.dataemissao) = 1

then 'Janeiro'

when datepart(month,b.dataemissao) = 2

then 'Fevereiro'

.........

end as mes

ou

case when month(b.dataemissao) = 1

then 'Janeiro'

when month(b.dataemissao) = 2

then 'Fevereiro'

.........

end as mes

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

Boa tarde Frederico

neste caso ele retonar dessa forma

001 rolamento 1pç janeiro

002 mancal 1pç Feveriro

tem como retorna assim os meses na horizontal?

................................Janeiro....................Fevereiro

001 rolamento................1

002 mancal.....................................................1

Editado por Antony
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

Boa tarde Frederico

neste caso ele retonar dessa forma

001 rolamento 1pç janeiro

002 mancal 1pç Feveriro

tem como retorna assim os meses na horizontal?

................................Janeiro....................Fevereiro

001 rolamento................1

002 mancal.....................................................1

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

Como posso agrupar esta sentença e ainda acrescentar o campo do mês da emissão

select

c.codigoreduzido,

c.nomefantasia,

sum ( a.quantidade) as quant,

a.codund,

from

titmmov a (nolock)

left outer join tmov b on b.codcoligada = a.codcoligada and

b.idmov = a.idmov

left outer join tprd c on c.codcoligada = a.codcoligada and

c.idprd = a.idprd

left outer join ttb4 e on e.codcoligada = c.codcoligada and

e.codtb4fat = c.codtb4fat

where

a.codcoligada ='1'

and b.dataemissão >=:pln_b2_d

and b.dataemissão <=:pln_b3_d

and b.codtmv in ('1.2.05','1.2.10','1.2.13')

group by

c.codigoreduzido,

c.nomefantasia,

a.codund

order by

c.nomefantasia

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  1.140
  • Conteúdo/Dia:  0.21
  • Reputação:   60
  • Pontos/Conquistas:  6.161
  • Conteúdo Resolvido:  0
  • Dias Ganho:  33
  • Status:  Offline
  • Idade:  42
  • Dispositivo:  Windows

Antony,

Da forma que você colocou com a compatibilidade do banco de dados (80) que é SQL2000 não tem como girar a tabela, a partir da versão 2005 você a opção PIVOT que faz esse trabalho.

Outra alternativa seria montar pra cada célula da sua planilha fazer uma consulta SQL para o mês ou montar uma consulta SQL trazendo o mês e dentro dela uma SubQuery com os totais também funciona.

[]'s

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

Antony,

Da forma que você colocou com a compatibilidade do banco de dados (80) que é SQL2000 não tem como girar a tabela, a partir da versão 2005 você a opção PIVOT que faz esse trabalho.

Outra alternativa seria montar pra cada célula da sua planilha fazer uma consulta SQL para o mês ou montar uma consulta SQL trazendo o mês e dentro dela uma SubQuery com os totais também funciona.

[]'s

Bom dia Frederico o meu Banco de dados é SQL 2005 o PIVOT é uma função que deve ser criada no banco de dados?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  58
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  672
  • Conteúdo/Dia:  0.10
  • Reputação:   25
  • Pontos/Conquistas:  4.005
  • Conteúdo Resolvido:  0
  • Dias Ganho:  18
  • Status:  Offline
  • Idade:  48

Esse é o PIVOT :victory:

SELECT
C.CODIGOREDUZIDO,
C.NOMEFANTASIA,
A.CODUND,
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 1 THEN SUM ( A.QUANTIDADE) END),0) AS 'JAN',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 2 THEN SUM ( A.QUANTIDADE) END),0) AS 'FEV',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 3 THEN SUM ( A.QUANTIDADE) END),0) AS 'MAR',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 4 THEN SUM ( A.QUANTIDADE) END),0) AS 'ABR',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 5 THEN SUM ( A.QUANTIDADE) END),0) AS 'MAI',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 6 THEN SUM ( A.QUANTIDADE) END),0) AS 'JUN',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 7 THEN SUM ( A.QUANTIDADE) END),0) AS 'JUL',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 8 THEN SUM ( A.QUANTIDADE) END),0) AS 'AGO',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 9 THEN SUM ( A.QUANTIDADE) END),0) AS 'SET',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 10 THEN SUM ( A.QUANTIDADE) END),0) AS 'OUT',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 11 THEN SUM ( A.QUANTIDADE) END),0) AS 'NOV',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 12 THEN SUM ( A.QUANTIDADE) END),0) AS 'DEZ'

FROM
   TITMMOV A (NOLOCK)
   LEFT OUTER JOIN TMOV B ON B.CODCOLIGADA = A.CODCOLIGADA AND
     B.IDMOV = A.IDMOV

LEFT OUTER JOIN TPRD C ON C.CODCOLIGADA = A.CODCOLIGADA AND
C.IDPRD = A.IDPRD

LEFT OUTER JOIN TTB4 E ON E.CODCOLIGADA = C.CODCOLIGADA AND
 E.CODTB4FAT = C.CODTB4FAT 

WHERE
A.CODCOLIGADA ='1'
AND B.STATUS = 'F'
AND B.DATAEMISSAO >='2012-01-01'
AND B.DATAEMISSAO <='2012-12-31'
AND B.CODTMV ='1.2.01' -- coloque seu movimento aqui, se for mais de um use "in ('','','')

GROUP BY
C.CODIGOREDUZIDO,
C.NOMEFANTASIA,
B.CODTMV,
A.CODUND,
B.DATAEMISSAO

ORDER BY
C.NOMEFANTASIA 

Depois nos diga se deu certo

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

Esse é o PIVOT :victory:

SELECT
C.CODIGOREDUZIDO,
C.NOMEFANTASIA,
A.CODUND,
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 1 THEN SUM ( A.QUANTIDADE) END),0) AS 'JAN',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 2 THEN SUM ( A.QUANTIDADE) END),0) AS 'FEV',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 3 THEN SUM ( A.QUANTIDADE) END),0) AS 'MAR',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 4 THEN SUM ( A.QUANTIDADE) END),0) AS 'ABR',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 5 THEN SUM ( A.QUANTIDADE) END),0) AS 'MAI',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 6 THEN SUM ( A.QUANTIDADE) END),0) AS 'JUN',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 7 THEN SUM ( A.QUANTIDADE) END),0) AS 'JUL',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 8 THEN SUM ( A.QUANTIDADE) END),0) AS 'AGO',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 9 THEN SUM ( A.QUANTIDADE) END),0) AS 'SET',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 10 THEN SUM ( A.QUANTIDADE) END),0) AS 'OUT',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 11 THEN SUM ( A.QUANTIDADE) END),0) AS 'NOV',
COALESCE((CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 12 THEN SUM ( A.QUANTIDADE) END),0) AS 'DEZ'

FROM
TITMMOV A (NOLOCK)
LEFT OUTER JOIN TMOV B ON B.CODCOLIGADA = A.CODCOLIGADA AND
B.IDMOV = A.IDMOV

LEFT OUTER JOIN TPRD C ON C.CODCOLIGADA = A.CODCOLIGADA AND
C.IDPRD = A.IDPRD

LEFT OUTER JOIN TTB4 E ON E.CODCOLIGADA = C.CODCOLIGADA AND
E.CODTB4FAT = C.CODTB4FAT

WHERE
A.CODCOLIGADA ='1'
AND B.STATUS = 'F'
AND B.DATAEMISSAO >='2012-01-01'
AND B.DATAEMISSAO <='2012-12-31'
AND B.CODTMV ='1.2.01' -- coloque seu movimento aqui, se for mais de um use "in ('','','')

GROUP BY
C.CODIGOREDUZIDO,
C.NOMEFANTASIA,
B.CODTMV,
A.CODUND,
B.DATAEMISSAO

ORDER BY
C.NOMEFANTASIA

Depois nos diga se deu certo

Boa tarde Robinson

Na planilha retornou as informações porém não agrupou as quantidades e para cada mês que tem uma quantidade ele repete o registo como no exemplo abaixo.

..........................Janeiro......Fevereiro........Março

001 rolamento.......1

001 rolamento..........................1

001 rolamento..............................................2

não sei se é possivel mas eu queria que retornasse em uma unica linha e agrupasse a quantidade do mês.

.........................Janeiro......Fevereiro........Março

001 rolamento......1..................1..................2

Agradeço pela atenção

Editado por Antony
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  58
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  672
  • Conteúdo/Dia:  0.10
  • Reputação:   25
  • Pontos/Conquistas:  4.005
  • Conteúdo Resolvido:  0
  • Dias Ganho:  18
  • Status:  Offline
  • Idade:  48

É verdade mas, já arrumei :)


SELECT
C.CODIGOREDUZIDO,
C.NOMEFANTASIA,
A.CODUND,
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 1 THEN A.QUANTIDADE END) AS 'JAN',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 2 THEN A.QUANTIDADE END) AS 'FEV',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 3 THEN A.QUANTIDADE END) AS 'MAR',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 4 THEN A.QUANTIDADE END) AS 'ABR',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 5 THEN A.QUANTIDADE END) AS 'MAI',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 6 THEN A.QUANTIDADE END) AS 'JUN',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 7 THEN A.QUANTIDADE END) AS 'JUL',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 8 THEN A.QUANTIDADE END) AS 'AGO',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 9 THEN A.QUANTIDADE END) AS 'SET',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 10 THEN A.QUANTIDADE END) AS 'OUT',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 11 THEN A.QUANTIDADE END) AS 'NOV',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 12 THEN A.QUANTIDADE END) AS 'DEZ'



FROM
TITMMOV A (NOLOCK)
INNER JOIN TMOV B
ON
B.CODCOLIGADA = A.CODCOLIGADA AND
B.IDMOV = A.IDMOV

INNER JOIN TPRD C
ON
C.CODCOLIGADA = A.CODCOLIGADA AND
C.IDPRD = A.IDPRD

LEFT OUTER JOIN TTB4 E
ON
E.CODCOLIGADA = C.CODCOLIGADA AND
E.CODTB4FAT = C.CODTB4FAT 

WHERE

A.CODCOLIGADA ='1'
AND B.STATUS <> 'C'
AND B.DATAEMISSAO >='2012-01-01'
AND B.DATAEMISSAO <='2012-12-31'
AND B.CODTMV ='1.2.01'

GROUP BY
C.CODIGOREDUZIDO,
C.NOMEFANTASIA,
A.CODUND
ORDER BY
C.NOMEFANTASIA 

Diz aí se deu certo pra vc também :victory:

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  58
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  672
  • Conteúdo/Dia:  0.10
  • Reputação:   25
  • Pontos/Conquistas:  4.005
  • Conteúdo Resolvido:  0
  • Dias Ganho:  18
  • Status:  Offline
  • Idade:  48

E aí Antony, conseguiu?

:EmoticonosMsN (85):

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

É verdade mas, já arrumei :)


SELECT
C.CODIGOREDUZIDO,
C.NOMEFANTASIA,
A.CODUND,
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 1 THEN A.QUANTIDADE END) AS 'JAN',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 2 THEN A.QUANTIDADE END) AS 'FEV',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 3 THEN A.QUANTIDADE END) AS 'MAR',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 4 THEN A.QUANTIDADE END) AS 'ABR',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 5 THEN A.QUANTIDADE END) AS 'MAI',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 6 THEN A.QUANTIDADE END) AS 'JUN',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 7 THEN A.QUANTIDADE END) AS 'JUL',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 8 THEN A.QUANTIDADE END) AS 'AGO',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 9 THEN A.QUANTIDADE END) AS 'SET',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 10 THEN A.QUANTIDADE END) AS 'OUT',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 11 THEN A.QUANTIDADE END) AS 'NOV',
SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 12 THEN A.QUANTIDADE END) AS 'DEZ'



FROM
TITMMOV A (NOLOCK)
INNER JOIN TMOV B
ON
B.CODCOLIGADA = A.CODCOLIGADA AND
B.IDMOV = A.IDMOV

INNER JOIN TPRD C
ON
C.CODCOLIGADA = A.CODCOLIGADA AND
C.IDPRD = A.IDPRD

LEFT OUTER JOIN TTB4 E
ON
E.CODCOLIGADA = C.CODCOLIGADA AND
E.CODTB4FAT = C.CODTB4FAT

WHERE

A.CODCOLIGADA ='1'
AND B.STATUS <> 'C'
AND B.DATAEMISSAO >='2012-01-01'
AND B.DATAEMISSAO <='2012-12-31'
AND B.CODTMV ='1.2.01'

GROUP BY
C.CODIGOREDUZIDO,
C.NOMEFANTASIA,
A.CODUND
ORDER BY
C.NOMEFANTASIA

Diz aí se deu certo pra vc também :victory:

Deu certo para periodo de 01/01/2012 a 31/12/2012. Tentei consultar do periodo 01/09/2011 a 30/09/2012 e não deu certo tenho que mudar alguma coisa para retornar este periodo

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  67
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  269
  • Conteúdo/Dia:  0.05
  • Reputação:   9
  • Pontos/Conquistas:  2.029
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Dispositivo:  Windows

Não deu certo porque este período está fixo na sentença SQL, veja abaixo em negrito:

WHERE

A.CODCOLIGADA ='1'

AND B.STATUS <> 'C'

AND B.DATAEMISSAO >='2012-01-01'

AND B.DATAEMISSAO <='2012-12-31'

AND B.CODTMV ='1.2.01'

Para ter a possibilidade de gerar relatório para qualquer período, basta substituir o valor fixo

por parâmetro, conforme abaixo:

WHERE

A.CODCOLIGADA ='1'

AND B.STATUS <> 'C'

AND B.DATAEMISSAO >= :Data_Emissao_Inicial

AND B.DATAEMISSAO <= :Data_Emissao_Final

AND B.CODTMV ='1.2.01'

No relatório, inserir 2 parâmetros: Data_Emissao_Inicial, Data_Emissao_Final

Desta forma, ao executar o relatório, será solicitado ao usuário digitar o intervalo de

data de Emissão. (Digitar sempre no formato DD/MM/YYYY - dia, mês e ano separados por /).

Veja se resolve.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

Não deu certo porque este período está fixo na sentença SQL, veja abaixo em negrito:

WHERE

A.CODCOLIGADA ='1'

AND B.STATUS <> 'C'

AND B.DATAEMISSAO >='2012-01-01'

AND B.DATAEMISSAO <='2012-12-31'

AND B.CODTMV ='1.2.01'

Para ter a possibilidade de gerar relatório para qualquer período, basta substituir o valor fixo

por parâmetro, conforme abaixo:

WHERE

A.CODCOLIGADA ='1'

AND B.STATUS <> 'C'

AND B.DATAEMISSAO >= :Data_Emissao_Inicial

AND B.DATAEMISSAO <= :Data_Emissao_Final

AND B.CODTMV ='1.2.01'

No relatório, inserir 2 parâmetros: Data_Emissao_Inicial, Data_Emissao_Final

Desta forma, ao executar o relatório, será solicitado ao usuário digitar o intervalo de

data de Emissão. (Digitar sempre no formato DD/MM/YYYY - dia, mês e ano separados por /).

Veja se resolve.

eu fiz conforme vc sugeriiu porém não retornou na seguência set.2011/ Out.2011/ Nov.2011 /Dez.2011 / Jan.2012 / Fev.2012 / Mar.2012 / Abril2012/ Maio2012 / Jun.2012 / Jul .2012 / Ago.2012/ Set.2012

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  67
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  269
  • Conteúdo/Dia:  0.05
  • Reputação:   9
  • Pontos/Conquistas:  2.029
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Dispositivo:  Windows

Penso que o problema está no fato de você estar gerando um perído que envolve dois anos: 2011 e 2012. Do jeito que a sentença está montada, ela soma as quantidades para cada mês de um determinado ano.

Do jeito que você mencionou acima, o ano também é importante na composição do SQL (set.2011/ Out.2011/ Nov.2011 ...)

Não estou com o SQL server agora aqui para testar. Não saberia de antemão como fazer para resolver isso. Caso você necessitar analisar qualquer período inclusive que envolva mais de um ano, teremos que pedir mais ajuda dos nossos amigos para reestruturar a SQL.

Um detalhe que temos que analisar, se for um período muito grande, ficaria inviável de analisar. Exemplo 2 anos poderia gerar 24 colunas diferentes (24 meses).

Espero ter ajudado.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

O problema é exatamente este mencionado por você está envolvendo 2011/2012 porém eu preciso apenas o periodo de 1 ano que seria de 01/09/2011 a 30/09/2012. Mas agradeço pela sua atenção

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  67
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  269
  • Conteúdo/Dia:  0.05
  • Reputação:   9
  • Pontos/Conquistas:  2.029
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Dispositivo:  Windows

O problema neste caso é que para o mês 09, o somatório das quantidades será acumulado (somará 09/2011 e 09/2012).

Se fosse de 01/09/2011 a 31/08/2012, penso que dará certo. Aliás você mencionou 1 ano e o período de 01/09/2011 a 31/08/ 2012 representa 1 ano. O período que você passou representa 13 meses.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

é verdade vc tem razão

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  67
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  269
  • Conteúdo/Dia:  0.05
  • Reputação:   9
  • Pontos/Conquistas:  2.029
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Dispositivo:  Windows

Faça o teste aí e veja se dá certo.

Como o relatório irá apresentar os meses de Setembro a Agosto, o que pode ser feito é deixar visivel no cabeçalho do relatório os parâmeros Data_Emissao_Inicial e Data_Emissao_Final, o que orientará o usuário quanto ao período que o sistema obedeceu para extração das informações (Data de Emissão do movimento).

Abraços.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

valeu obrigado

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

valeu obrigado

Só me exclarece uma dúvida aonde está diferença nesta sentença acima para que ela seja uma PIVOT

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  67
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  269
  • Conteúdo/Dia:  0.05
  • Reputação:   9
  • Pontos/Conquistas:  2.029
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Dispositivo:  Windows

Antony,

Pelo pouco que sei, utilizando o operador PIVOT, escreve-se bem menos que usando CASE WHEN. No caso desse seu exemplo, o resultado é um PIVOT pois apresenta os dados somados em colunas. Porém utilizando CASE WHEN

Dê uma olhada na NET sobre a sintaxe do PIVOT.

Se algum colega puder dar mais parcela de contribuição, será bem vindo.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  1.140
  • Conteúdo/Dia:  0.21
  • Reputação:   60
  • Pontos/Conquistas:  6.161
  • Conteúdo Resolvido:  0
  • Dias Ganho:  33
  • Status:  Offline
  • Idade:  42
  • Dispositivo:  Windows

Antony,

Com o Pivot você torna a sua consulta SQL dinamizada, nesse caso de Mês por exemplo é simples pois você têm 12 meses, mas imagine no lugar dos mês ser os seus produtos e onde está os produtos é o mês. Agora imagine você fazer o case when de todos os produtos ou de um grupo de produtos que você tem, e mais se entrar mais um grupo de produtos ou mais um produto, você precisaria dar manutenção no código.

Usando o Pivot você só precisa adicionar o código do grupo de produto ou do produto e query já encaixa a nova coluna. Abaixo um exemplo de sentença usando o Pivot, no exemplo abaixo a sequência em que o SQL executa a consulta SQL.

/* 3 Parte */

SELECT

*

FROM

/* 1 Parte */

(SELECT CodCli, DATEPART(M,datapedido) AS MES ,ValorTotal from pedido) AS A

/* 2 parte*/

PIVOT

(SUM (ValorTotal) FOR MES IN ([01], [02], [03], [04], [05],[06], [07], [08], [09], [10], [11],[12])) AS pvt

where Codcli = @Codcli)

[]'s

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  138
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  567
  • Conteúdo/Dia:  0.12
  • Reputação:   6
  • Pontos/Conquistas:  4.176
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline

Antony,

Com o Pivot você torna a sua consulta SQL dinamizada, nesse caso de Mês por exemplo é simples pois você têm 12 meses, mas imagine no lugar dos mês ser os seus produtos e onde está os produtos é o mês. Agora imagine você fazer o case when de todos os produtos ou de um grupo de produtos que você tem, e mais se entrar mais um grupo de produtos ou mais um produto, você precisaria dar manutenção no código.

Usando o Pivot você só precisa adicionar o código do grupo de produto ou do produto e query já encaixa a nova coluna. Abaixo um exemplo de sentença usando o Pivot, no exemplo abaixo a sequência em que o SQL executa a consulta SQL.

/* 3 Parte */

SELECT

*

FROM

/* 1 Parte */

(SELECT CodCli, DATEPART(M,datapedido) AS MES ,ValorTotal from pedido) AS A

/* 2 parte*/

PIVOT

(SUM (ValorTotal) FOR MES IN ([01], [02], [03], [04], [05],[06], [07], [08], [09], [10], [11],[12])) AS pvt

where Codcli = @Codcli)

[]'s

Bom dia Frederico neste seu exemplo vc usou a sintaxe Pivot , nesta sentença abaixo não foi usado nenhuma sintaxe Pivot e a sentença criou coluna dos meses.

SELECT

C.CODIGOREDUZIDO,

C.NOMEFANTASIA,

A.CODUND,

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 1 THEN A.QUANTIDADE END) AS 'JAN',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 2 THEN A.QUANTIDADE END) AS 'FEV',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 3 THEN A.QUANTIDADE END) AS 'MAR',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 4 THEN A.QUANTIDADE END) AS 'ABR',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 5 THEN A.QUANTIDADE END) AS 'MAI',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 6 THEN A.QUANTIDADE END) AS 'JUN',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 7 THEN A.QUANTIDADE END) AS 'JUL',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 8 THEN A.QUANTIDADE END) AS 'AGO',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 9 THEN A.QUANTIDADE END) AS 'SET',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 10 THEN A.QUANTIDADE END) AS 'OUT',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 11 THEN A.QUANTIDADE END) AS 'NOV',

SUM(CASE WHEN DATEPART(MONTH,B.DATAEMISSAO) = 12 THEN A.QUANTIDADE END) AS 'DEZ'

FROM

TITMMOV A (NOLOCK)

INNER JOIN TMOV B

ON

B.CODCOLIGADA = A.CODCOLIGADA AND

B.IDMOV = A.IDMOV

INNER JOIN TPRD C

ON

C.CODCOLIGADA = A.CODCOLIGADA AND

C.IDPRD = A.IDPRD

LEFT OUTER JOIN TTB4 E

ON

E.CODCOLIGADA = C.CODCOLIGADA AND

E.CODTB4FAT = C.CODTB4FAT

WHERE

A.CODCOLIGADA ='1'

AND B.STATUS <> 'C'

AND B.DATAEMISSAO >='2012-01-01'

AND B.DATAEMISSAO <='2012-12-31'

AND B.CODTMV ='1.2.01'

GROUP BY

C.CODIGOREDUZIDO,

C.NOMEFANTASIA,

A.CODUND

ORDER BY

C.NOMEFANTASIA

Link para comentar
Compartilhar em outros sites

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.