Boas senhores, tenho o resultado de uma query onde gostaria de transformar o conteúdo da coluna em novas colunas. No exemplo abaixo, gostaria de transformar a coluna grupo em colunas (grupo1,grupo2...)
Consigo fazer isso sem criar tabela temporário e SPs?
Data Grupo Item Total
01/07/2017 Grupo 1 prego 1
01/07/2017 Grupo 2 parafuso 5
01/07/2017 Grupo 2 pacote 1 6
02/07/2017 Grupo 1 Pacote 2 8
02/07/2017 Grupo 2 parafuso 6
02/07/2017 Grupo 2 local 4
02/07/2017 Grupo 3 pacote 1 8
03/07/2017 Grupo 1 parafuso 12
03/07/2017 Grupo 4 local 12
Transformar conteúdo de linha em coluna
-
- Rank: Analista Pleno
- Mensagens: 124
- Registrado em: Sáb, 18 Nov 2006 11:51 am
- Localização: Rio de Janeiro - RJ
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Olá,
Caso você esteja usando versão anterior a 11(onde foi inclusa a função PIVOT e UNPIVOT), você pode fazer da seguinte forma:
OBS: Considerando que o valor que você quer agrupar em cada grupo seja a quantidade dos itens.
OBS2: Você precisa especificar manualmente cada grupo que existe.
Caso você esteja usando versão anterior a 11(onde foi inclusa a função PIVOT e UNPIVOT), você pode fazer da seguinte forma:
WITH MYSQL AS (
SELECT '01/07/2017' DT_X, 'Grupo 1' GRUPO, 'prego' ITEM ,1 QTDE FROM DUAL UNION ALL
SELECT '01/07/2017' DT_X, 'Grupo 2' GRUPO, 'parafuso' ITEM ,5 QTDE FROM DUAL UNION ALL
SELECT '01/07/2017' DT_X, 'Grupo 2' GRUPO, 'pacote 1' ITEM ,6 QTDE FROM DUAL UNION ALL
SELECT '02/07/2017' DT_X, 'Grupo 1' GRUPO, 'pacote 2' ITEM ,8 QTDE FROM DUAL UNION ALL
SELECT '02/07/2017' DT_X, 'Grupo 2' GRUPO, 'parafuso' ITEM ,6 QTDE FROM DUAL UNION ALL
SELECT '02/07/2017' DT_X, 'Grupo 2' GRUPO, 'local' ITEM ,4 QTDE FROM DUAL UNION ALL
SELECT '02/07/2017' DT_X, 'Grupo 3' GRUPO, 'pacote 1' ITEM ,8 QTDE FROM DUAL UNION ALL
SELECT '03/07/2017' DT_X, 'Grupo 1' GRUPO, 'parafuso' ITEM ,12 QTDE FROM DUAL UNION ALL
SELECT '03/07/2017' DT_X, 'Grupo 4' GRUPO, 'local' ITEM ,12 QTDE FROM DUAL)
SELECT M.DT_X
, M.ITEM
, SUM(CASE WHEN M.GRUPO = 'Grupo 1' THEN M.QTDE ELSE 0 END) GRUPO1
, SUM(CASE WHEN M.GRUPO = 'Grupo 2' THEN M.QTDE ELSE 0 END) GRUPO2
, SUM(CASE WHEN M.GRUPO = 'Grupo 3' THEN M.QTDE ELSE 0 END) GRUPO3
, SUM(CASE WHEN M.GRUPO = 'Grupo 4' THEN M.QTDE ELSE 0 END) GRUPO4
FROM MYSQL M
GROUP BY M.DT_X
, M.ITEM
OBS2: Você precisa especificar manualmente cada grupo que existe.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante