Cor4win
@Cor4win
Изучаю android-разработку

Как транспонировать несколько столбцов в несколько строк?

Сложно сформулировать, покажу на примере.
В таблице несколько полей с датами и им соответствуют поля со значениями, но мне не нужно, чтобы для каждого типа значений(val1, val2 и тд) были отдельные столбцы в выгрузке, мне нужно, чтобы был один столбец с названием значения и один со значениями, поэтому, я написал запрос:

select val1_date as date, 'val1' as val_name, count(val1) as value
from ... 
group by 1,2
union
select val2_date as date, 'val2' as val_name, count(val2) as value
from ... 
group by 1,2

Получаем соответственно:
5dea09e67da2c961873816.png
А вопрос собственно в том, как это написать нормально, без использования юнион, одним запросом.
  • Вопрос задан
  • 1924 просмотра
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Это называется PIVOT: hp+vertica+pivot.

Например, календарный отчёт, на MS SQL.

таблица с полями: id, month_id, kpi1, kpi2
чтобы стало: id, kpi1-2020-01-01, kpi1-2020-02-01, kpi2-2020-01-01, kpi2-2020-02-01.

Без PIVOT
SELECT ID, SUM(M1K1), SUM(M2K1), SUM(M1K2), SUM(M2K2) FROM
(SELECT ID, kpi1 AS M1K1, 0 AS M2K1, kpi2 AS M1K2, 0 AS M2K2 FROM Table_K WHERE month_id = 1
UNION
SELECT ID, 0, kpi1, 0, kpi2  FROM Table_K WHERE month_id = 2) AS DailyData
GROUP BY ID
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы