Usuário com melhor resposta
Tranformar coluna em linha

Pergunta
-
Bom dia a todos.
Tenho um select no sql que preciso transformar as colunas de mês e quantidade em linhas, é possível, se for como posse fazer no meu select.
Minha query
SELECT
SB.B1_DESC,
m.nm_mes as Mes,
m.cd_mes,
SUM(SD.D2_QUANT) AS QTDA
FROM SD2010 AS SD
left outer join mes m on m.cd_mes = month(SD.D2_EMISSAO)
INNER JOIN SB1010 AS SB WITH (NOLOCK) ON SB.B1_COD = SD.D2_COD
WHERE SD.D_E_L_E_T_ <> '*'
AND SD.D2_CF IN ('5102', '5117', '5119', '5123', '5124', '5403', '5405', '6102', '6108', '6110', '6117', '6119', '6123', '6124', '6403', '6405', '7102')
AND SD.D2_EMISSAO BETWEEN CONVERT(datetime,'01/01/2016', 103) AND CONVERT(datetime,'31/12/2016', 103)
AND SB.B1_DESC ='ARISTOFLEX AVC - CX25'
GROUP BY SB.B1_DESC, m.nm_mes, m.cd_mes
ORDER BY m.cd_mesImagem com o Resultado
JUNIOR GUERREIRO T.I
Respostas
-
Tente usando pivot.
Ficaria mais ou menos assim:
SELECT B1_DESC , [1] AS JANEIRO , [2] AS FEVEREIRO , [3] AS MARÇO , [4] AS ABRIL , [5] AS MAIO , [6] AS JUNHO , [7] AS JULHO , [8] AS AGOSTO , [9] AS SETEMBRO , [10] AS OUTUBRO , [11] AS NOVEMBRO , [12] AS DEZEMBRO FROM ( SELECT SB.B1_DESC, m.nm_mes as Mes, m.cd_mes, SUM(SD.D2_QUANT) AS QTDA FROM SD2010 AS SD left outer join mes m on m.cd_mes = month(SD.D2_EMISSAO) INNER JOIN SB1010 AS SB WITH (NOLOCK) ON SB.B1_COD = SD.D2_COD WHERE SD.D_E_L_E_T_ <> '*' AND SD.D2_CF IN ('5102', '5117', '5119', '5123', '5124', '5403', '5405', '6102', '6108', '6110', '6117', '6119', '6123', '6124', '6403', '6405', '7102') AND SD.D2_EMISSAO BETWEEN CONVERT(datetime,'01/01/2016', 103) AND CONVERT(datetime,'31/12/2016', 103) AND SB.B1_DESC ='ARISTOFLEX AVC - CX25' GROUP BY SB.B1_DESC, m.nm_mes, m.cd_mes) AS Q PIVOT (SUM(QTDA) FOR Mes IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]))P
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
- Marcado como Resposta Junior Guerreiro segunda-feira, 10 de abril de 2017 14:13
-
Talvez porque você tem uma tabela com esse nome... experimente remover o alias da coluna nm_mes:
select B1_DESC, [Janeiro], [Fevereiro], [Março], [Abril], [Maio], [Junho], [Julho], [Agosto], [Setembro], [Outubro], [Novembro], [Dezembro] from ( SELECT SB.B1_DESC, m.nm_mes, SD.D2_QUANT FROM SD2010 AS SD left outer join mes m on m.cd_mes = month(SD.D2_EMISSAO) INNER JOIN SB1010 AS SB WITH (NOLOCK) ON SB.B1_COD = SD.D2_COD WHERE SD.D_E_L_E_T_ <> '*' AND SD.D2_CF IN ('5102', '5117', '5119', '5123', '5124', '5403', '5405', '6102', '6108', '6110', '6117', '6119', '6123', '6124', '6403', '6405', '7102') AND SD.D2_EMISSAO BETWEEN CONVERT(datetime,'01/01/2016', 103) AND CONVERT(datetime,'31/12/2016', 103) AND SB.B1_DESC ='ARISTOFLEX AVC - CX25' ) as f pivot ( SUM(D2_QUANT) FOR nm_mes IN ([Janeiro], [Fevereiro], [Março], [Abril], [Maio], [Junho], [Julho], [Agosto], [Setembro], [Outubro], [Novembro], [Dezembro]) ) as p
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Junior Guerreiro segunda-feira, 10 de abril de 2017 14:13
Todas as Respostas
-
Bom dia,
Experimente fazer uns testes utilizando Pivot:
select B1_DESC, [Janeiro], [Fevereiro], [Março], [Abril], [Maio], [Junho], [Julho], [Agosto], [Setembro], [Outubro], [Novembro], [Dezembro] from ( SELECT SB.B1_DESC, m.nm_mes as Mes, SD.D2_QUANT FROM SD2010 AS SD left outer join mes m on m.cd_mes = month(SD.D2_EMISSAO) INNER JOIN SB1010 AS SB WITH (NOLOCK) ON SB.B1_COD = SD.D2_COD WHERE SD.D_E_L_E_T_ <> '*' AND SD.D2_CF IN ('5102', '5117', '5119', '5123', '5124', '5403', '5405', '6102', '6108', '6110', '6117', '6119', '6123', '6124', '6403', '6405', '7102') AND SD.D2_EMISSAO BETWEEN CONVERT(datetime,'01/01/2016', 103) AND CONVERT(datetime,'31/12/2016', 103) AND SB.B1_DESC ='ARISTOFLEX AVC - CX25' ) as f pivot ( SUM(D2_QUANT) FOR MES IN ([Janeiro], [Fevereiro], [Março], [Abril], [Maio], [Junho], [Julho], [Agosto], [Setembro], [Outubro], [Novembro], [Dezembro]) ) as p
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Kanaãm Luz Romero Rodrigues segunda-feira, 10 de abril de 2017 13:30
-
Tente usando pivot.
Ficaria mais ou menos assim:
SELECT B1_DESC , [1] AS JANEIRO , [2] AS FEVEREIRO , [3] AS MARÇO , [4] AS ABRIL , [5] AS MAIO , [6] AS JUNHO , [7] AS JULHO , [8] AS AGOSTO , [9] AS SETEMBRO , [10] AS OUTUBRO , [11] AS NOVEMBRO , [12] AS DEZEMBRO FROM ( SELECT SB.B1_DESC, m.nm_mes as Mes, m.cd_mes, SUM(SD.D2_QUANT) AS QTDA FROM SD2010 AS SD left outer join mes m on m.cd_mes = month(SD.D2_EMISSAO) INNER JOIN SB1010 AS SB WITH (NOLOCK) ON SB.B1_COD = SD.D2_COD WHERE SD.D_E_L_E_T_ <> '*' AND SD.D2_CF IN ('5102', '5117', '5119', '5123', '5124', '5403', '5405', '6102', '6108', '6110', '6117', '6119', '6123', '6124', '6403', '6405', '7102') AND SD.D2_EMISSAO BETWEEN CONVERT(datetime,'01/01/2016', 103) AND CONVERT(datetime,'31/12/2016', 103) AND SB.B1_DESC ='ARISTOFLEX AVC - CX25' GROUP BY SB.B1_DESC, m.nm_mes, m.cd_mes) AS Q PIVOT (SUM(QTDA) FOR Mes IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]))P
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
- Marcado como Resposta Junior Guerreiro segunda-feira, 10 de abril de 2017 14:13
-
Bom dia..
Não rodou sua query, deu erro no mes da linha marcada em negrito.
pivot
(
SUM(D2_QUANT) FOR MES IN
([Janeiro], [Fevereiro], [Março], [Abril], [Maio], [Junho],
[Julho], [Agosto], [Setembro], [Outubro], [Novembro], [Dezembro])
) as pJUNIOR GUERREIRO T.I
-
Talvez porque você tem uma tabela com esse nome... experimente remover o alias da coluna nm_mes:
select B1_DESC, [Janeiro], [Fevereiro], [Março], [Abril], [Maio], [Junho], [Julho], [Agosto], [Setembro], [Outubro], [Novembro], [Dezembro] from ( SELECT SB.B1_DESC, m.nm_mes, SD.D2_QUANT FROM SD2010 AS SD left outer join mes m on m.cd_mes = month(SD.D2_EMISSAO) INNER JOIN SB1010 AS SB WITH (NOLOCK) ON SB.B1_COD = SD.D2_COD WHERE SD.D_E_L_E_T_ <> '*' AND SD.D2_CF IN ('5102', '5117', '5119', '5123', '5124', '5403', '5405', '6102', '6108', '6110', '6117', '6119', '6123', '6124', '6403', '6405', '7102') AND SD.D2_EMISSAO BETWEEN CONVERT(datetime,'01/01/2016', 103) AND CONVERT(datetime,'31/12/2016', 103) AND SB.B1_DESC ='ARISTOFLEX AVC - CX25' ) as f pivot ( SUM(D2_QUANT) FOR nm_mes IN ([Janeiro], [Fevereiro], [Março], [Abril], [Maio], [Junho], [Julho], [Agosto], [Setembro], [Outubro], [Novembro], [Dezembro]) ) as p
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Junior Guerreiro segunda-feira, 10 de abril de 2017 14:13
-