Resultado da soma em duas colunas
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.
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
Curtidas 0
Respostas
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
att.Isaac
select loja, codprod, sum(qtdprod) produto from tb
group by loja,codprod
order by loja , codprod
GOSTEI 0
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?
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
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
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
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?
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
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.
monte um codigo de create e de insert de uma pequena quantidade que tento fazer para vc.
abraço.
GOSTEI 0
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.
monte um codigo de create e de insert de uma pequena quantidade que tento fazer para vc.
abraço.
GOSTEI 0
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
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
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
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
22/09/2015
Excelente.
Deu exatamente como precisava. Agora estou implementando com segundas e terceiras tabelas. Ajudou muito!
Obrigadão.... Valeu mesmo Isaac!
Deu exatamente como precisava. Agora estou implementando com segundas e terceiras tabelas. Ajudou muito!
Obrigadão.... Valeu mesmo Isaac!
GOSTEI 0
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