Jump to content
ferreira12

Agrupar tudo no mesmo Select

Recommended Posts

ferreira12

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

Share this post


Link to post
Share on other sites
pikax

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."

Share this post


Link to post
Share on other sites
Loira

retiro o lixo que disse :c

Edited by Loira

"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
ferreira12

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

Share this post


Link to post
Share on other sites
pikax

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."

Share this post


Link to post
Share on other sites
ferreira12

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

Share this post


Link to post
Share on other sites
pikax

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."

Share this post


Link to post
Share on other sites
ferreira12

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

Share this post


Link to post
Share on other sites
Loira

.[.code = sql.].

ldsxklv .[./code.].

mete o cod assim pa se ler mais facil D:


"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
pikax

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."

Share this post


Link to post
Share on other sites
pikax

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."

Share this post


Link to post
Share on other sites
pikax

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."

Share this post


Link to post
Share on other sites
ferreira12

está me a dar este erro..

'DATEFROMPARTS' is not a recognized built-in function name.

Share this post


Link to post
Share on other sites
pikax

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."

Share this post


Link to post
Share on other sites
ferreira12

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

Share this post


Link to post
Share on other sites
pikax

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."

Share this post


Link to post
Share on other sites
ferreira12

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64)

Apr 22 2011 19:23:43

Copyright © Microsoft Corporation

Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)

Share this post


Link to post
Share on other sites
pikax

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."

Share this post


Link to post
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.