Jump to content

Agrupar tudo no mesmo Select


ferreira12

Recommended Posts

Boas,

Esta query destina-se a adpatar para uma representação grafica.

Anterior mente tinha uma query que me devolve os a soma dos valores e das quantidades vendidas pelos 12 meses

query aqui presente

select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt from dbo.fngrafico('01-04-2013 00:01','30-04-2013 23:59')
union
select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt from dbo.fngrafico('01-05-2013 00:1','31-05-2013 23:59')
union
select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt from dbo.fngrafico('01-06-2013 00:01','31-06-2013 23:59')
order by ordem asc

Agora a ideia era colocar o ano anterior ou seja, queria colocar da seguinte forma,

Mes TotalValor totalQnt TotalqntAnoAnterior TotalQntAnoAnterior

Abr

Mai

Jun

Link to comment
Share on other sites

faz assim:

select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt, MONTH(Data) as Mes, YEAR(Data) as Ano
FROM dbo.fngrafico
GROUP BY YEAR(Data),MONTH(Data)
Order BY 1,2

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

O problema é que eu nao tenho data na função só recebo valor e qtd

Posso é optar por colocar da seguinte forma o select

select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt, Case Month(Cast('06-01-2012 00:01' as char)) WHEN '1' THEN 'Jan' WHEN '2' THEN 'Fev' WHEN '3' THEN 'Mar' WHEN '4' THEN 'Abr' WHEN '5' THEN 'Mai' WHEN '6' THEN 'Jun' WHEN '7' THEN 'Jul' WHEN '8' THEN 'Ago' WHEN '9' THEN 'Set' WHEN '10' THEN 'Out' WHEN '11' THEN 'Nov' WHEN '12' THEN 'Dez' end as ano from dbo.fngrafico('06-01-2012 00:01','06-30-2012 23:59')

Mas assim já nao conseguiria pegar no teu codigo

Edited by ferreira12
Link to comment
Share on other sites

quais sao os valores que recebes?

qual e' a estrutura da tabela?

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

eu recebo da tabela valor e qnt

o grafico neste momento e pegando no formato deste select recebo os seguintes paramentero

select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt, Case Month(Cast('06-01-2012 00:01' as char)) WHEN '1' THEN 'Jan' WHEN '2' THEN 'Fev' WHEN '3' THEN 'Mar' WHEN '4' THEN 'Abr' WHEN '5' THEN 'Mai' WHEN '6' THEN 'Jun' WHEN '7' THEN 'Jul' WHEN '8' THEN 'Ago' WHEN '9' THEN 'Set' WHEN '10' THEN 'Out' WHEN '11' THEN 'Nov' WHEN '12' THEN 'Dez' end as Mes from dbo.fngrafico('06-01-2012 00:01','06-30-2012 23:59')

TotalValor TotalQnt Mes TotalValorAnoAnterior TotalQntAnoAnteiror

800 25 Mar valorMar qntMar

500 10 Abr

600 15 Mai

Agora a ideia era colocar a informação do mês do ano anterior ao lado

Link to comment
Share on other sites

Identa o sql...

Quais sao os parametros?? so' estou a ver datas estaticas.....

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

os parametros é data1(inicio do mes) e data2(fim do mes)

select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt, Case Month(Cast('01-04-2012 00:01' as char)) WHEN '1' THEN 'Jan' WHEN '2' THEN 'Fev' WHEN '3' THEN 'Mar' WHEN '4' THEN 'Abr' WHEN '5' THEN 'Mai' WHEN '6' THEN 'Jun' WHEN '7' THEN 'Jul' WHEN '8' THEN 'Ago' WHEN '9' THEN 'Set' WHEN '10' THEN 'Out' WHEN '11' THEN 'Nov' WHEN '12' THEN 'Dez' end as Mes from dbo.fngrafico('01-04-2013 00:01','30-04-2013 23:59')
union
select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt, Case Month(Cast('01-05-2013 00:01' as char)) WHEN '1' THEN 'Jan' WHEN '2' THEN 'Fev' WHEN '3' THEN 'Mar' WHEN '4' THEN 'Abr' WHEN '5' THEN 'Mai' WHEN '6' THEN 'Jun' WHEN '7' THEN 'Jul' WHEN '8' THEN 'Ago' WHEN '9' THEN 'Set' WHEN '10' THEN 'Out' WHEN '11' THEN 'Nov' WHEN '12' THEN 'Dez' end as Mes from dbo.fngrafico('01-05-2013 00:1','31-05-2013 23:59')
union
select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt, Case Month(Cast('01-06-2013 00:01' as char)) WHEN '1' THEN 'Jan' WHEN '2' THEN 'Fev' WHEN '3' THEN 'Mar' WHEN '4' THEN 'Abr' WHEN '5' THEN 'Mai' WHEN '6' THEN 'Jun' WHEN '7' THEN 'Jul' WHEN '8' THEN 'Ago' WHEN '9' THEN 'Set' WHEN '10' THEN 'Out' WHEN '11' THEN 'Nov' WHEN '12' THEN 'Dez' end as Mes from dbo.fngrafico('01-06-2013 00:01','31-06-2013 23:59')
union
select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt, Case Month(Cast('01-04-2012 00:01' as char)) WHEN '1' THEN 'Jan' WHEN '2' THEN 'Fev' WHEN '3' THEN 'Mar' WHEN '4' THEN 'Abr' WHEN '5' THEN 'Mai' WHEN '6' THEN 'Jun' WHEN '7' THEN 'Jul' WHEN '8' THEN 'Ago' WHEN '9' THEN 'Set' WHEN '10' THEN 'Out' WHEN '11' THEN 'Nov' WHEN '12' THEN 'Dez' end as Mes from dbo.fngrafico('01-04-2012 00:01','30-04-2012 23:59')
union
select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt, Case Month(Cast('01-05-2012 00:01' as char)) WHEN '1' THEN 'Jan' WHEN '2' THEN 'Fev' WHEN '3' THEN 'Mar' WHEN '4' THEN 'Abr' WHEN '5' THEN 'Mai' WHEN '6' THEN 'Jun' WHEN '7' THEN 'Jul' WHEN '8' THEN 'Ago' WHEN '9' THEN 'Set' WHEN '10' THEN 'Out' WHEN '11' THEN 'Nov' WHEN '12' THEN 'Dez' end as Mes from dbo.fngrafico('01-05-2012 00:1','31-05-2012 23:59')
union
select Sum(Valor) as TotalValor, Sum(qnt) as totalqnt, Case Month(Cast('01-06-2012 00:01' as char)) WHEN '1' THEN 'Jan' WHEN '2' THEN 'Fev' WHEN '3' THEN 'Mar' WHEN '4' THEN 'Abr' WHEN '5' THEN 'Mai' WHEN '6' THEN 'Jun' WHEN '7' THEN 'Jul' WHEN '8' THEN 'Ago' WHEN '9' THEN 'Set' WHEN '10' THEN 'Out' WHEN '11' THEN 'Nov' WHEN '12' THEN 'Dez' end as Mes from dbo.fngrafico('01-06-2012 00:01','31-06-2012 23:59')
order by ordem asc
Link to comment
Share on other sites

Qual e' a tua versao do sql?

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Abstrai-te da funcao, cria uma tabela temporaria para facilitar.

DECLARE @mes int = 1
DECLARE @ano int = 2013

DECLARE @tbl table(total int,qtd int,mes int,ano int);

DECLARE @i int= 2010 --para o ciclo dos anos
DECLARE @a int= 1 --para ciclo dos meses

WHILE @i<YEAR(GETDATE())
   BEGIN
       SET @a=0
       WHILE @a<13
           BEGIN
               INSERT INTO @tbl VALUES(dbo.fngrafico(DATEFROMPARTS(@i,@a,1),EOMONTH(DATEFROMPARTS(@i,@a,1))),@mes,@ano);
               SET @a = ++@a;
           END

       SET @i = ++@i;
   END


SELECT *
   FROM @tbl

Nao foi testado...

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

basicamente em ves de fazeres aqueles unions todos, crias um ciclo e inseres os dados numa tabela temporaria.

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

convem utilizar a versao 2012 do sql....

http://msdn.microsoft.com/en-us/library/hh213228.aspx

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Estou a usar a seguinte versao do sql server 2012:

Microsoft SQL Server Management Studio 11.0.3128.0

Microsoft Analysis Services Client Tools 11.0.3128.0

Microsoft Data Access Components (MDAC) 6.1.7601.17514

Microsoft MSXML 3.0 6.0

Microsoft Internet Explorer 9.10.9200.16614

Microsoft .NET Framework 4.0.30319.18047

Operating System 6.1.7601

Link to comment
Share on other sites

isso sao as tools, tou a falar da DB!

print @@version

posta aqui o resultado

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

pois a versao do sql e' 2008, que nao suporta a funcao.

Ve aqui as funcoes de datas do sql.

http://www.codeproject.com/Articles/566542/Date-and-Time-Data-Types-and-Functions-SQL-Server

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.