Resultado da soma em duas colunas

Automação Comercial

22/09/2015

Galera,



Estou precisando muito de uma ajuda. Para uma tabela com as informações abaixo:

Lojacod, Codpro, qtdpro
1, 15, 10
1, 20, 5
1, 15, 2
2, 20, 3
2, 15, 5
2, 20, 15



Como posso ter o resultado a seguir do total de produto por loja? Tem a soma total das duas, mas esta parte esta fácil. O que não estou conseguindo é colocar uma loja por coluna com a soma nesta coluna.

Codpro. | Loja1. | Loja2 |. Total
15. 12. 5. 17
20. 5. 18. 23

Valeu.
Fernando

Fernando

Curtidas 0

Respostas

Isaac Jose

Isaac Jose

22/09/2015

se entendi direitro isso deve ajudar
att.Isaac



select loja, codprod, sum(qtdprod) produto from tb
group by loja,codprod
order by loja , codprod
GOSTEI 0
Fernando

Fernando

22/09/2015

Olá Isaac

Dessa forma que passou funciona, mas não da forma que preciso.

O seu resultado apareceria assim:

loja, cod, soma
1 , 1 , 11
1 , 2 , 7
1 , 3 , 5
2, 1 , 3
2, 2, 12
2, 3 , 6


O que preciso, seria:

cod, loja1, loja2
1 11 3
2 7 12
3 5 6

Pois a idéia seria que eu conseguisse observar e comparar as quantidades entre as lojas.

Vi em algum lugar algo como abaixo, mas não funcionou

select PRO2.PROCOD, (SELECT PRO2.PROCOD, SUM(PRO2.PROQTEST) FROM PRO2 where PRO2.LOJCOD = 1 GROUP BY PRO2.PROCOD) loja1,
(SELECT PRO2.PROCOD, SUM(PRO2.PROQTEST) FROM PRO2 where PRO2.LOJCOD = 2 GROUP BY PRO2.PROCOD) loja2 FROM PRO2

Alguma idéia de como fazer isso pessoal?
GOSTEI 0
Isaac Jose

Isaac Jose

22/09/2015

bom dia tente fazer com o pivot , unpivot vide exemplo.

no codigo abaixo tenho a coluna codloja, pf,pj, total transformei em codloja,tipo_pessoa,meta.

obs se for somente essas duas lojas faça com case when..

drop table producao.Tb_MetasPFPJ_Dia_loja
go
SELECT codloja, Tipo_Pessoa, Meta
Into producao.Tb_MetasPFPJ_Dia_loja
FROM
(SELECT DISTINCT
A.codloja,
[PF] = CASE WHEN A.PF IS NOT NULL THEN a.PF END,
[PJ] = CASE WHEN A.PJ IS NOT NULL THEN a.PJ END

from producao.Tb_Metaag_PFPJ A) P
UNPIVOT
(Meta FOR Tipo_Pessoa IN ([PF], [PJ])
) AS UNPVT

GO
GOSTEI 0
Fernando

Fernando

22/09/2015

Olá Isaac,


Quase deu certo, porém acabou retornando um item por linha por loja e as outras colunas ficaram nulas, veja o resultado:

procod lojcod1 lojcod2 lojcod3
13185 NULL NULL 0
13185 NULL 10 NULL
13185 0 NULL NULL
13186 NULL NULL 0
13186 NULL 2 NULL
13186 2 NULL NULL
13187 NULL NULL 0
13187 NULL 0 NULL
13187 2 NULL NULL

Usei o código abaixo

select distinct pro2.procod,
LOJCOD1 = case when PRO2.LOJCOD = 1 then SUM(PRO2.PROQTEST)
end,
LOJCOD2 = case when PRO2.LOJCOD = 2 then SUM(PRO2.PROQTEST)
end,
LOJCOD3 = case when PRO2.LOJCOD = 3 then SUM(PRO2.PROQTEST)
end
from pro2

group by pro2.procod, pro2.lojcod

order by pro2.procod



Como faria agora para colocar na mesma linha? Tentei algumas coisas aqui mas sem sucesso.

Alguém sabe como seria?
GOSTEI 0
Isaac Jose

Isaac Jose

22/09/2015

vc nao precisa agrupar a loja.

monte um codigo de create e de insert de uma pequena quantidade que tento fazer para vc.

abraço.
GOSTEI 0
Isaac Jose

Isaac Jose

22/09/2015

vc nao precisa agrupar a loja.

monte um codigo de create e de insert de uma pequena quantidade que tento fazer para vc.

abraço.
GOSTEI 0
Fernando

Fernando

22/09/2015

Desculpe a demora, sem agrupar dá erro, segue o create e insert.


Tentei de outras formas com pivot, mas sem sucesso



create table pro2A (proCod int, lojCod int, proQtest int)

insert pro2A values(100, 1, 5)
insert pro2A values(100, 2, 10)
insert pro2A values(100, 3, 15)
insert pro2A values(200, 1, 10)
insert pro2A values(200, 2, 5)
insert pro2A values(200, 3, 5)
insert pro2A values(300, 1, 5)
insert pro2A values(300, 2, 10)
insert pro2A values(300, 3, 15)
insert pro2A values(400, 1, 10)
insert pro2A values(400, 2, 5)
insert pro2A values(400, 3, 5)
GOSTEI 0
Isaac Jose

Isaac Jose

22/09/2015

segue.

select b.proCod, MAX(b.loja1)loja1,MAX(b.loja2)loja2,MAX(b.loja3)loja3
from
(
select a.proCod,
LOJA1 = CASE WHEN A.lojCod = 1 THEN SUM(a.proqtest)
END,
LOJa2 = CASE WHEN A.lojCod = 2 THEN SUM(a.proqtest)
END,
LOJA3 = CASE WHEN A.lojCod = 3 THEN SUM(a.proqtest)
END
from pro2A a
GROUP BY a.lojCod,a.proCod) b
GROUP BY b.proCod




result
proCod loja1 loja2 loja3
100 5 10 15
200 10 5 5
300 5 10 15
400 10 5 5
GOSTEI 0
Fernando

Fernando

22/09/2015

Excelente.

Deu exatamente como precisava. Agora estou implementando com segundas e terceiras tabelas. Ajudou muito!


Obrigadão.... Valeu mesmo Isaac!
GOSTEI 0
Isaac Jose

Isaac Jose

22/09/2015

por nada . disponha sempre tera alguem para ajudar a resolver e entender melhor, continue postando suas duvidas se eu souber ajudarei senao sempre teremos alguem para ajudar a resolver
GOSTEI 0
POSTAR