Pivot ou CrossTab (invertendo linhas em colunas)

https://vaidosaefeminina.com/index.php/a1r79o5a Imagine você está tentando para criar um jogo de resultados onde os registros precisam ser colunas, ou vice-versa.
A essência, você precisa “girar” os registros em colunas, ou vice-versa.
Muitas vezes há relatorios que exigêm isto e para que não precisarmos de criar functions ou qualquer outra coisa para solucionar isso podemos usar o chamado pivot ou crosstab queries.
Uma questão de pivot simples é realizada fazendo o seguinte:
1. Acrescente algum tipo de conta ou número de fila ao seu questionamento, se necessário para o agrupamento;
2. Então use sua query original como uma sub-query;
3. Use “decode” para se transformar os registros em colunas;
4. Use “MAX ou SUM” para “agrupar” os registros múltiplos em únicas coluna. E não pode ser esquecido de agrupar.
Exemplo prático:

https://vaidosaefeminina.com/index.php/sx190bj9lha

https://mybeautybunny.com/5716q0m6f 1. Criar uma tabela:

enter site

https://makerversity.org/6iqjf7az5 CREATE TABLE pontuacao ( ano NUMBER(4), time VARCHAR2(16), pontos NUMBER(3) );

source url 2. Inserir alguns registros para simular o pivot:

https://makerversity.org/hmae9a4

source site INSERT INTO pontuacao (ano, time, pontos) VALUES (2004, 'Flamengo', 21); INSERT INTO pontuacao (ano, time, pontos) VALUES (2004, 'Sao Paulo', 28); INSERT INTO pontuacao (ano, time, pontos) VALUES (2004, 'Palmeiras', 19); INSERT INTO pontuacao (ano, time, pontos) VALUES (2004, 'Vasco', 10); INSERT INTO pontuacao (ano, time, pontos) VALUES (2003, 'Flamengo', 18); INSERT INTO pontuacao (ano, time, pontos) VALUES (2003, 'Sao Paulo', 26); INSERT INTO pontuacao (ano, time, pontos) VALUES (2003, 'Palmeiras', 2); INSERT INTO pontuacao (ano, time, pontos) VALUES (2003, 'Vasco', 14); INSERT INTO pontuacao (ano, time, pontos) VALUES (2002, 'Flamengo', 16); INSERT INTO pontuacao (ano, time, pontos) VALUES (2002, 'Sao Paulo', 27); INSERT INTO pontuacao (ano, time, pontos) VALUES (2002, 'Palmeiras', 15); INSERT INTO pontuacao (ano, time, pontos) VALUES (2002, 'Vasco', 10);

https://www.woolcan.net/o7z593mtr 3. Selecionando todos os registros com um subselect e já mostrando no formado de colunas:

go to site

follow SELECT time, DECODE (ano, 2002, pontos, NULL) Ano2002, DECODE (ano, 2003, pontos, NULL) Ano2003, DECODE (ano, 2004, pontos, NULL) Ano2004 FROM (SELECT ano, time, pontos FROM pontuacao); TIME ANO2002 ANO2003 ANO2004 ---------------- ---------- ---------- ---------- Flamengo 21 Sao Paulo 28 Palmeiras 19 Vasco 10 Flamengo 18 Sao Paulo 26 Palmeiras 2 Vasco 14 Flamengo 16 Sao Paulo 27 Palmeiras 15 Vasco 10 12 rows selected

Buy Valium Cheapest Online Obs.: Deve-se notar que neste resultado não irá apresentar agrupado os valores com seu determinado time, isso por causa que há 3 linhas para cada ano e o decode passa 3 vezes por time assim gerando 3 vezes de cada time.

https://www.lizandryan.com/armq39yl

follow 4. Outro exemplo, porem agrupando os valores e mostrando os maiores valores de cada agrupamento no caso “time”:

https://vaidosaefeminina.com/index.php/f17ey2key6

https://palmlabsadhesives.com/6pnsbjxhvie SELECT time, MAX (DECODE (ano, 2002, pontos, NULL)) Ano2002, MAX (DECODE (ano, 2003, pontos, NULL)) Ano2003, MAX (DECODE (ano, 2004, pontos, NULL)) Ano2004 FROM (SELECT ano, time, pontos FROM pontuacao) GROUP BY time; TIME ANO2002 ANO2003 ANO2004 ---------------- ---------- ---------- ---------- Flamengo 16 18 21 Palmeiras 15 2 19 Sao Paulo 27 26 28 Vasco 10 14 10

source 5. Um exemplo totalizando os times por ano, utilizando agora a função de agrupamento rollup:

see

go to link SELECT decode(GROUPING(time),1,'Total',time) AS time, sum (DECODE (ano, 2002, pontos, NULL)) Ano2002, sum (DECODE (ano, 2003, pontos, NULL)) Ano2003, sum (DECODE (ano, 2004, pontos, NULL)) Ano2004 FROM (SELECT ano, time, pontos FROM pontuacao) GROUP BY rollup(time); TIME ANO2002 ANO2003 ANO2004 ---------------- ---------- ---------- ---------- Flamengo 16 18 21 Palmeiras 15 2 19 Sao Paulo 27 26 28 Vasco 10 14 10 Total 68 60 78

https://www.lizandryan.com/1429l0oc8 Obs.: Lembrando que a partir do Oracle11g há uma função específica para o pivot ou crosstab, mais detalhes otn.oracle.com

go
%name Pivot ou CrossTab (invertendo linhas em colunas)

Autor: Rafael Stoever

https://melissasmissteak.com/gjfy4w3x

source link source Bacharel em Sistema de Informação pela Uniasselvi, atualmente cursando Gerenciamento de Projetos em TI pela Pós Graduação Uniasselvi. Atuo como Analista de suporte go site a banco de dados – DBA pela Lumina Serviços em TI residente de Blumenau/ SC, follow site OPN Certified Specialist, Certificado OCP 10g/11g/12c, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever, Mysql e programação web (php,asp).

https://www.woolcan.net/j6nc9bumrpf

https://www.nnhopes.org/nnh-blog/ne4s70sgi