Usuário com melhor resposta
Carga Tabela Fato

Pergunta
-
Boa Tarde Srs,
Gostaria de uma ajuda na carga da tabela fatos.
Tenho o seguinte select:
select x.CodSKCliente
,x.CodSkRegiao
,x.CodSKProduto
,x.CodSKTempo
,count(x.QuantidadeComprado)
from (
select C.CodSKCliente
,R.CodSkRegiao
,P.CodSKProduto
,T.CodSKTempo
,sum(convert(numeric(18,2),P.ValorProduto)) ValorProduto
,count(C.codcliente) QuantidadeComprado
from DBSTG_Ecommerce.dbo.TSTG_ExecucaoPrincipal TSTG
join DimCliente C
on tstg.codcliente=C.codcliente
join DimProduto p
on p.CodProduto=TSTG.codproduto
left join DimRegiao R
ON r.codregiao=tstg.codregiao
left join DimTempo T
ON convert(int,replace(convert(varchar(10),T.CodBKDia,20),'-',''))=TSTG.datacompra
group by C.CodSKCliente
,R.CodSkRegiao
,P.CodSKProduto
,T.CodSKTempo
) x
group by x.CodSKCliente
,x.CodSkRegiao
,x.CodSKProduto
,x.CodSKTempo
Retorno:
CodSKCliente CodSkRegiao CodSKProduto CodSKTempo (Quantidade) 2 2 2 12651 1 3 2 3 12621 1 5 4 6 11196 1 4 3 5 11895 1 1 1 1 11895 1 4 3 4 11895 1 6 5 7 11895 1 8 6 9 12621 1 Qual problema?
Se perceber, a coluna QuantidadeComprado apresenta o valor 1, que na verdade seria 2 com o seguinte comando:
select C.CodSKCliente
,R.CodSkRegiao
,P.CodProduto
,T.CodSKTempo
, sum(convert(numeric(18,2),P.ValorProduto)) ValorProduto
, count(C.codcliente) QuantidadeComprado
from DBSTG_Ecommerce.dbo.TSTG_ExecucaoPrincipal TSTG
join DimCliente C
on tstg.codcliente=C.codcliente
join DimProduto p
on p.CodProduto=TSTG.codproduto
left join DimRegiao R
ON r.codregiao=tstg.codregiao
left join DimTempo T
ON convert(int,replace(convert(varchar(10),T.CodBKDia,20),'-',''))=TSTG.datacompra
group by C.CodSKCliente
,R.CodSkRegiao
,P.CodProduto
,T.CodSKTemporetorno:
CodSKCliente CodSkRegiao CodProduto CodSKTempo ValorProduto QuantidadeComprado 2 2 2 12651 11321.33 1 5 4 5 11196 71.32 1 8 6 8 12621 12.23 1 3 2 3 12621 71.32 1 1 1 1 11895 31.20 1 6 5 6 11895 133.22 1 4 3 4 11895 3460.56 2 perceba que substitui o campo CodSkProduto por P.CodProduto.
Utilizo o CodSkProduto por questão de numero sequencial, assim como os demais, mas na hora de agrupar, infelizmente ele não retorna o valor 2 como é no CodProduto,
Alguém pode me ajudar?
- Editado SQLSERVER_MAN sexta-feira, 27 de junho de 2014 18:11
Respostas
-
Olá, é um pouco confuso responder sem ver a base de dados.
O que percebi é que em sua select que compõe a tabela "x" no FROM você já usa o Count da quantidade comprada, desta forma entende que os campos lá já estão devidamente agrupados.
Conta-los novamente na select de fora certamente retornará 1 unico registro.
Eu tentaria o seguinte:
select x.CodSKCliente
,x.CodSkRegiao
,x.CodSKProduto
,x.CodSKTempo
,SUM(x.QuantidadeComprado) as QuantidadeComprado -- Troquei o Count por SUM, agora se retorna apenas 1 registro o group não está agrupando nada.
from (
select C.CodSKCliente
,R.CodSkRegiao
,P.CodSKProduto
,T.CodSKTempo
,sum(convert(numeric(18,2),P.ValorProduto)) ValorProduto
,count(C.codcliente) QuantidadeComprado
from DBSTG_Ecommerce.dbo.TSTG_ExecucaoPrincipal TSTG
join DimCliente C
on tstg.codcliente=C.codcliente
join DimProduto p
on p.CodProduto=TSTG.codproduto
left join DimRegiao R
ON r.codregiao=tstg.codregiao
left join DimTempo T
ON convert(int,replace(convert(varchar(10),T.CodBKDia,20),'-',''))=TSTG.datacompra
group by C.CodSKCliente
,R.CodSkRegiao
,P.CodSKProduto
,T.CodSKTempo
) x
group by x.CodSKCliente
,x.CodSkRegiao
,x.CodSKProduto
,x.CodSKTempo- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 3 de julho de 2014 15:17
- Marcado como Resposta Durval RamosModerator segunda-feira, 5 de janeiro de 2015 22:33
Todas as Respostas
-
Olá, é um pouco confuso responder sem ver a base de dados.
O que percebi é que em sua select que compõe a tabela "x" no FROM você já usa o Count da quantidade comprada, desta forma entende que os campos lá já estão devidamente agrupados.
Conta-los novamente na select de fora certamente retornará 1 unico registro.
Eu tentaria o seguinte:
select x.CodSKCliente
,x.CodSkRegiao
,x.CodSKProduto
,x.CodSKTempo
,SUM(x.QuantidadeComprado) as QuantidadeComprado -- Troquei o Count por SUM, agora se retorna apenas 1 registro o group não está agrupando nada.
from (
select C.CodSKCliente
,R.CodSkRegiao
,P.CodSKProduto
,T.CodSKTempo
,sum(convert(numeric(18,2),P.ValorProduto)) ValorProduto
,count(C.codcliente) QuantidadeComprado
from DBSTG_Ecommerce.dbo.TSTG_ExecucaoPrincipal TSTG
join DimCliente C
on tstg.codcliente=C.codcliente
join DimProduto p
on p.CodProduto=TSTG.codproduto
left join DimRegiao R
ON r.codregiao=tstg.codregiao
left join DimTempo T
ON convert(int,replace(convert(varchar(10),T.CodBKDia,20),'-',''))=TSTG.datacompra
group by C.CodSKCliente
,R.CodSkRegiao
,P.CodSKProduto
,T.CodSKTempo
) x
group by x.CodSKCliente
,x.CodSkRegiao
,x.CodSKProduto
,x.CodSKTempo- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 3 de julho de 2014 15:17
- Marcado como Resposta Durval RamosModerator segunda-feira, 5 de janeiro de 2015 22:33
-
SQLSErver_Man,
Concordo com o Ricardo, se você deseja somar então é necessário utilizar a função de agregação SUM ao invês do Count para contar.
Por outro lado, você destacou que no Segundo Select a contagem é realizada.
Então gostaria de entender qual é a condição que esta fazendo que ocorra a contagem em um Select e no outro a Soma!
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Editado Junior Galvão - MVPMVP quinta-feira, 3 de julho de 2014 15:20