Adaptar uma pesquisa usando o Pivot.
Ola Galera boa tarde!!!
Estou pensando em adaptar uma pesquisa que tenho atual, para usar o pivot, so que para variar um pouco, não sei usar o pivot. rsrsr
Não sei nem por onde começar a alteração.
Vou postar a consulta para ver se conseguem me ajudar.
Estou pensando em adaptar uma pesquisa que tenho atual, para usar o pivot, so que para variar um pouco, não sei usar o pivot. rsrsr
Não sei nem por onde começar a alteração.
Vou postar a consulta para ver se conseguem me ajudar.
DECLARE @INICIO DATETIME, @FIM DATETIME, @DATA DATETIME, @QUANTIDADE DECIMAL(10) SET @INICIO = [DADO1] SET @FIM = [DADO2] SET @DATA = @INICIO SET @QUANTIDADE = 0 WHILE @DATA <= @FIM BEGIN IF (DATEPART(WEEKDAY, @DATA) = 7) SET @QUANTIDADE = @QUANTIDADE + 1 SET @DATA = DATEADD(DAY,1,@DATA) END SELECT R.CODLOJ+R.CODVEN+SUBSTRING((CONVERT(VARCHAR(10),((R.DATEMI - DAY(R.DATEMI)) +1),103)),4,8) AS CHAVE, CASE WHEN R.CODLOJ='001' THEN '001 - LAPA' WHEN R.CODLOJ='002' THEN '002 - FREGUESIA' WHEN R.CODLOJ='003' THEN '003 - PINHEIROS' WHEN R.CODLOJ='004' THEN '004 - JUNDIAI' WHEN R.CODLOJ='005' THEN '005 - TATUAPE' WHEN R.CODLOJ='006' THEN '006 - OSASCO' ELSE 'SEM LOJA' END AS Loja, R.CODVEN+'-'+V.NOME AS VENDEDOR, SUBSTRING((CONVERT(VARCHAR(10),((R.DATEMI - DAY(R.DATEMI)) +1),103)),4,8) mesano, CASE WHEN R.TIPOREQ = 'VD' THEN COUNT(R.NUMREQ) ELSE 0 END AS QTDVDA, CASE WHEN R.TIPOREQ = 'VD' THEN SUM(R.TOTGERAL) ELSE 0 END AS TOTVDA, CASE WHEN R.TIPOREQ = 'DV' THEN COUNT(R.NUMREQ) ELSE 0 END AS QTDDEV, CASE WHEN R.TIPOREQ = 'DV' THEN SUM(R.TOTGERAL) ELSE 0 END AS TOTDEV, SUM(R.TOTGERAL) AS TOTAL, SUM(R.TOTGERAL) AS PARTIC, SUM(R.TOTGERAL*0) AS TIQMEDIO, SUM(R.TOTGERAL*0) AS MEDIAVDA, SUM(R.TOTGERAL*0) AS MEDIALIQVDA, (((SELECT (DATEDIFF(dd, [DADO1], [DADO2]) + 1) -(DATEDIFF(wk, [DADO1], [DADO2]) * 2) )+(@QUANTIDADE/3))-('[DADO5]'))) AS DUTEIS, (SELECT SUM(R.TOTGERAL) FROM AS R WHERE (R.TIPOREQ = 'VD') AND(R.DATEMI >= [DADO1]) AND(R.DATEMI <= [DADO2]) AND(R.CODCPV NOT IN [DADO4])) AS TOTGERAL FROM AS R LEFT JOIN AS V ON(V.CODCLI=R.CODVEN) WHERE (R.TIPOREQ IN ('VD','DV')) AND(R.DATEMI >= [DADO1]) AND(R.DATEMI <= [DADO2]) AND(R.CODVEN = [DADO3]) AND(R.CODCPV NOT IN [DADO4]) AND(R.CODVEN NOT IN [DADO7]) GROUP BY R.CODLOJ,R.TIPOREQ,R.CODVEN,V.NOME,SUBSTRING((CONVERT(VARCHAR(10),((R.DATEMI - DAY(R.DATEMI)) +1),103)),4,8) ORDER BY R.CODLOJ,R.CODVEN,SUBSTRING((CONVERT(VARCHAR(10),((R.DATEMI - DAY(R.DATEMI)) +1),103)),4,8)
Alex Lekao
Curtidas 0
Respostas
Isaac Jose
02/03/2016
Ola Galera boa tarde!!!
Estou pensando em adaptar uma pesquisa que tenho atual, para usar o pivot, so que para variar um pouco, não sei usar o pivot. rsrsr
Não sei nem por onde começar a alteração.
Vou postar a consulta para ver se conseguem me ajudar.
Estou pensando em adaptar uma pesquisa que tenho atual, para usar o pivot, so que para variar um pouco, não sei usar o pivot. rsrsr
Não sei nem por onde começar a alteração.
Vou postar a consulta para ver se conseguem me ajudar.
DECLARE @INICIO DATETIME, @FIM DATETIME, @DATA DATETIME, @QUANTIDADE DECIMAL(10) SET @INICIO = [DADO1] SET @FIM = [DADO2] SET @DATA = @INICIO SET @QUANTIDADE = 0 WHILE @DATA <= @FIM BEGIN IF (DATEPART(WEEKDAY, @DATA) = 7) SET @QUANTIDADE = @QUANTIDADE + 1 SET @DATA = DATEADD(DAY,1,@DATA) END SELECT R.CODLOJ+R.CODVEN+SUBSTRING((CONVERT(VARCHAR(10),((R.DATEMI - DAY(R.DATEMI)) +1),103)),4,8) AS CHAVE, CASE WHEN R.CODLOJ='001' THEN '001 - LAPA' WHEN R.CODLOJ='002' THEN '002 - FREGUESIA' WHEN R.CODLOJ='003' THEN '003 - PINHEIROS' WHEN R.CODLOJ='004' THEN '004 - JUNDIAI' WHEN R.CODLOJ='005' THEN '005 - TATUAPE' WHEN R.CODLOJ='006' THEN '006 - OSASCO' ELSE 'SEM LOJA' END AS Loja, R.CODVEN+'-'+V.NOME AS VENDEDOR, SUBSTRING((CONVERT(VARCHAR(10),((R.DATEMI - DAY(R.DATEMI)) +1),103)),4,8) mesano, CASE WHEN R.TIPOREQ = 'VD' THEN COUNT(R.NUMREQ) ELSE 0 END AS QTDVDA, CASE WHEN R.TIPOREQ = 'VD' THEN SUM(R.TOTGERAL) ELSE 0 END AS TOTVDA, CASE WHEN R.TIPOREQ = 'DV' THEN COUNT(R.NUMREQ) ELSE 0 END AS QTDDEV, CASE WHEN R.TIPOREQ = 'DV' THEN SUM(R.TOTGERAL) ELSE 0 END AS TOTDEV, SUM(R.TOTGERAL) AS TOTAL, SUM(R.TOTGERAL) AS PARTIC, SUM(R.TOTGERAL*0) AS TIQMEDIO, SUM(R.TOTGERAL*0) AS MEDIAVDA, SUM(R.TOTGERAL*0) AS MEDIALIQVDA, (((SELECT (DATEDIFF(dd, [DADO1], [DADO2]) + 1) -(DATEDIFF(wk, [DADO1], [DADO2]) * 2) )+(@QUANTIDADE/3))-('[DADO5]'))) AS DUTEIS, (SELECT SUM(R.TOTGERAL) FROM AS R WHERE (R.TIPOREQ = 'VD') AND(R.DATEMI >= [DADO1]) AND(R.DATEMI <= [DADO2]) AND(R.CODCPV NOT IN [DADO4])) AS TOTGERAL FROM AS R LEFT JOIN AS V ON(V.CODCLI=R.CODVEN) WHERE (R.TIPOREQ IN ('VD','DV')) AND(R.DATEMI >= [DADO1]) AND(R.DATEMI <= [DADO2]) AND(R.CODVEN = [DADO3]) AND(R.CODCPV NOT IN [DADO4]) AND(R.CODVEN NOT IN [DADO7]) GROUP BY R.CODLOJ,R.TIPOREQ,R.CODVEN,V.NOME,SUBSTRING((CONVERT(VARCHAR(10),((R.DATEMI - DAY(R.DATEMI)) +1),103)),4,8) ORDER BY R.CODLOJ,R.CODVEN,SUBSTRING((CONVERT(VARCHAR(10),((R.DATEMI - DAY(R.DATEMI)) +1),103)),4,8)
GOSTEI 0
Isaac Jose
02/03/2016
boa tarde Alex blz..
mano só tenho como te passar um exemplo agora..estou indo embora...
mais amanha ou mais tarde tento entender melhor isso abraço.
SELECT codag, Tipo_Pessoa, Meta
Into producao.Tb_MetasPFPJ_Dia_AG
FROM
(SELECT DISTINCT
A.codag,
[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
mano só tenho como te passar um exemplo agora..estou indo embora...
mais amanha ou mais tarde tento entender melhor isso abraço.
SELECT codag, Tipo_Pessoa, Meta
Into producao.Tb_MetasPFPJ_Dia_AG
FROM
(SELECT DISTINCT
A.codag,
[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
Alex Lekao
02/03/2016
OI Isaac, blz.
sem crise.
cara, to tomando uma surra do carramba nesse tal de pivot. rsrsr
ta doido veio, tive ate que parar um pouco q as ideias estavam conflitando. rsrsr
sem crise.
cara, to tomando uma surra do carramba nesse tal de pivot. rsrsr
ta doido veio, tive ate que parar um pouco q as ideias estavam conflitando. rsrsr
GOSTEI 0
Isaac Jose
02/03/2016
bom dia lekão ... poderia explicar como estão as suas informações e como quer?
já tentou fazer com case?
já tentou fazer com case?
GOSTEI 0
Alex Lekao
02/03/2016
Oi Isaac, bom dia!!!
Entao, eu tenho quero pegar o periodo de vendas de um ano, e agrupar por mes e car os valores de vendas, devolucoes, vendas liquidas, qtd de vendas, qtd de devolucoes, e qtds liquidas, etc.
Da forma que esta atualmente ate atende, mas os meses sao apresentados sequencialmente por linha, eu gostaria que eles fossem apresentados por colunas.
Ja quebrei bastante a cabeca com isso, e nunca consegui pensar em uma forma de fazer.
com o case nao sei se ficaria dinamico, ja ate utilizei o case em outras situacoes que eram similares a essa, mas nao ficou muito bom. rsrsr
Entao, eu tenho quero pegar o periodo de vendas de um ano, e agrupar por mes e car os valores de vendas, devolucoes, vendas liquidas, qtd de vendas, qtd de devolucoes, e qtds liquidas, etc.
Da forma que esta atualmente ate atende, mas os meses sao apresentados sequencialmente por linha, eu gostaria que eles fossem apresentados por colunas.
Ja quebrei bastante a cabeca com isso, e nunca consegui pensar em uma forma de fazer.
com o case nao sei se ficaria dinamico, ja ate utilizei o case em outras situacoes que eram similares a essa, mas nao ficou muito bom. rsrsr
GOSTEI 0
Isaac Jose
02/03/2016
entendi ... tenho algo do tipo.. me manda um script de criação dessas tables e um pouco de insert no meu email que faço algo pra vc..
GOSTEI 0
Alex Lekao
02/03/2016
qual o seu e-mail? rsrsr
nao sei se ja tenho. srsr
ou manda para um e-mail para mim que respondo. rsrsr
alex_linhares_es@yahoo.com.br
nao sei se ja tenho. srsr
ou manda para um e-mail para mim que respondo. rsrsr
alex_linhares_es@yahoo.com.br
GOSTEI 0
Isaac Jose
02/03/2016
tem kkkkk...
olha tenho pronto algo desse tipo..
---campos em 3 colunas uma para cada produto
select a.campo1,a.campo2,a.campo3
max(a.prodi1 )as prodi1 ,max(a.prodi2 )as prodi2, max(a.prodi3 )as prodi3 ,
----campos em uma coluna de produtos
from (select
prodi1 = case when b.tintCodCart = 1 then b.monVlrCart
end,
prod12 = case when b.tintCodCart =122 then b.monVlrCart
end,
prodi3 = case when b.tintCodCart = 3 then b.monVlrCart
end,
a.campo1,a.campo2,a.campo3
from tb1 a left join
tb2 b on a.campo1 = b.campo1 and
a.campo2 = b.campo2 left join
tb3 c on b.tintCodCart = c.tintCodCart
where b.sintAno = 2016 and b.tintMes = 2)a
group by a.campo1,a.campo2,a.campo3
order by a.campo1,a.campo2,a.campo3
vou te mandar um email.
olha tenho pronto algo desse tipo..
---campos em 3 colunas uma para cada produto
select a.campo1,a.campo2,a.campo3
max(a.prodi1 )as prodi1 ,max(a.prodi2 )as prodi2, max(a.prodi3 )as prodi3 ,
----campos em uma coluna de produtos
from (select
prodi1 = case when b.tintCodCart = 1 then b.monVlrCart
end,
prod12 = case when b.tintCodCart =122 then b.monVlrCart
end,
prodi3 = case when b.tintCodCart = 3 then b.monVlrCart
end,
a.campo1,a.campo2,a.campo3
from tb1 a left join
tb2 b on a.campo1 = b.campo1 and
a.campo2 = b.campo2 left join
tb3 c on b.tintCodCart = c.tintCodCart
where b.sintAno = 2016 and b.tintMes = 2)a
group by a.campo1,a.campo2,a.campo3
order by a.campo1,a.campo2,a.campo3
vou te mandar um email.
GOSTEI 0
Alex Lekao
02/03/2016
legal...
cara, esse negocio do pivot da um nó na minha cabeca, acho que o problema eh comigo mesmo. srsr
cara, esse negocio do pivot da um nó na minha cabeca, acho que o problema eh comigo mesmo. srsr
GOSTEI 0
Isaac Jose
02/03/2016
que nada... kkk ..
manda ai vamos montar dos dois jeitos basicamente é a mesma coisa mais ai vc testa pra ver qual é mais performático.
manda ai vamos montar dos dois jeitos basicamente é a mesma coisa mais ai vc testa pra ver qual é mais performático.
GOSTEI 0
Alex Lekao
02/03/2016
blz.
Obrigado.
Obrigado.
GOSTEI 0
João Françozo
02/03/2016
Olá Alex,
Segue um modelo que fiz alguns dias atrás.
Como pode observar o SQL, fiz a soma de quantidade de produtos agrupados por dia, no pivot lá em baixo fiz a soma da coluna QTDE_KG e coloquei os dias do Meses.
Observa que a soma da QTDE_KG esta for DIAS (referente).
Depende a versão do SQL SERVER tem que habilitar esse recurso.
EXEC sp_dbcmptlevel BASEDADOS,90
Se precisa meu Skype é JOAOTASSOLI
SELECT * FROM
(SELECT
DAY(E.DATA_MOVTO) AS DIAS,
SUM(IT.QTDE_PRI) AS QTDE_KG,
IT.COD_PRODUTO,
R.DESC_PRODUTO_EST
FROM TBENTRADAS E
INNER JOIN TBENTRADASITEM IT
ON IT.CHAVE_FATO = E.CHAVE_FATO
INNER JOIN TBPRODUTO R
ON R.COD_PRODUTO = IT.COD_PRODUTO
WHERE
E.COD_TIPO_MV ='622' AND
E.DATA_MOVTO BETWEEN '20120801' AND '20120804'
GROUP BY
IT.COD_PRODUTO,
R.DESC_PRODUTO_EST,
E.DATA_MOVTO) AS PROD
PIVOT
(SUM(QTDE_KG) FOR DIAS IN
([01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31])
) AS PIVOTTABLE
Segue um modelo que fiz alguns dias atrás.
Como pode observar o SQL, fiz a soma de quantidade de produtos agrupados por dia, no pivot lá em baixo fiz a soma da coluna QTDE_KG e coloquei os dias do Meses.
Observa que a soma da QTDE_KG esta for DIAS (referente).
Depende a versão do SQL SERVER tem que habilitar esse recurso.
EXEC sp_dbcmptlevel BASEDADOS,90
Se precisa meu Skype é JOAOTASSOLI
SELECT * FROM
(SELECT
DAY(E.DATA_MOVTO) AS DIAS,
SUM(IT.QTDE_PRI) AS QTDE_KG,
IT.COD_PRODUTO,
R.DESC_PRODUTO_EST
FROM TBENTRADAS E
INNER JOIN TBENTRADASITEM IT
ON IT.CHAVE_FATO = E.CHAVE_FATO
INNER JOIN TBPRODUTO R
ON R.COD_PRODUTO = IT.COD_PRODUTO
WHERE
E.COD_TIPO_MV ='622' AND
E.DATA_MOVTO BETWEEN '20120801' AND '20120804'
GROUP BY
IT.COD_PRODUTO,
R.DESC_PRODUTO_EST,
E.DATA_MOVTO) AS PROD
PIVOT
(SUM(QTDE_KG) FOR DIAS IN
([01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31])
) AS PIVOTTABLE
GOSTEI 0
Alex Lekao
02/03/2016
oi Joao, boa tarde!!!
Cara, estou pensando em fazer algo dinamico, no caso, que as colunas sejam "criadas" de acordo com o que for aparecendo. rsrs
Mas ja me enrolei de novo e vou ter que deixar meio que em aberto por enquanto. rsrsr
Obrigado desde ja pela ajuda.
Cara, estou pensando em fazer algo dinamico, no caso, que as colunas sejam "criadas" de acordo com o que for aparecendo. rsrs
Mas ja me enrolei de novo e vou ter que deixar meio que em aberto por enquanto. rsrsr
Obrigado desde ja pela ajuda.
GOSTEI 0