[DÚVIDA] Dúvida com query SQL para fazer um PIVOT
Fala moçada, estou com dúvida sobre como fazer uma query em SQL para mostrar os dados, que estão como na primeira tabela, da forma como na segunda tabela. É possível fazer isso? Só tem um resultado possivel para cada conjunto (hora, minuto)
Dados Originais:
hora | minuto | resultado |
---|---|---|
13 | 0 | result_13_0 |
13 | 15 | result_13_15 |
13 | 30 | result_13_30 |
13 | 45 | result_13_45 |
14 | 0 | result_14_0 |
14 | 15 | result_14_15 |
14 | 30 | result_14_30 |
14 | 45 | result_14_45 |
15 | 0 | result_15_0 |
15 | 15 | result_15_15 |
15 | 30 | result_15_30 |
15 | 45 | result_15_45 |
Como eu quero mostrar:
0 | 15 | 30 | 45 | |
---|---|---|---|---|
15 | result_15_0 | result_15_15 | result_15_30 | result_15_45 |
14 | result_14_0 | result_14_15 | result_14_30 | result_14_45 |
13 | result_13_0 | result_13_15 | result_13_30 | result_13_45 |
Aqui está a implementação utilizando SQL Server, e aqui o link para a documentação da Microsoft.
DROP TABLE IF EXISTS #TabelaValores;
CREATE TABLE #TabelaValores
(
hora TINYINT,
minuto TINYINT,
resultado VARCHAR(20),
PRIMARY KEY (hora, minuto)
);
INSERT INTO #TabelaValores VALUES
(13, 0, 'result_13_0'),
(13, 15, 'result_13_15'),
(13, 30, 'result_13_30'),
(13, 45, 'result_13_45'),
(14, 0, 'result_14_0'),
(14, 15, 'result_14_15'),
(14, 30, 'result_14_30'),
(14, 45, 'result_14_45'),
(15, 0, 'result_15_0'),
(15, 15, 'result_15_15'),
(15, 30, 'result_15_30'),
(15, 45,'result_15_45');
SELECT
hora, [0], [15], [30], [45]
FROM (
SELECT
hora, minuto, resultado
FROM
#TabelaValores
) p
PIVOT
(
MIN(resultado) FOR minuto IN ([0], [15], [30], [45])
) AS piv
ORDER BY
hora DESC
DROP TABLE IF EXISTS #TabelaValores;