Преобразование таблицы, ориентированной на столбцы, в таблицу, ориентированную на строки

У меня есть структура таблицы в базе данных Greenplum, как показано ниже: введите описание изображения здесь

Хотите изменить его на следующую структуру, чтобы поддерживать круговые диаграммы на Таблице.

введите описание изображения здесь

Может ли кто-нибудь мне помочь? Спасибо!


person user2569524    schedule 19.02.2014    source источник
comment
Это называется сводной таблицей. Не знаю, как это сделать в Greenplum; в PostgreSQL вы должны использовать функцию кросс-таблицы в расширении tablefunc.   -  person Craig Ringer    schedule 19.02.2014
comment
Вы также можете использовать unpivot, но это не даст вам точного результата, который вы хотите.   -  person Krishnraj Rana    schedule 19.02.2014
comment
@KrishnrajRana. похоже, что в postgres нет функции unpivot. Альтернатива была unnest, но я не могу использовать unnest, так как моя версия postgres - 8.2.   -  person user2569524    schedule 19.02.2014


Ответы (4)


  1. Экспорт таблицы в файл CSV
  2. Установите надстройку Tableau Excel
  3. Откройте файл CSV в Excel и используйте надстройку для изменения формы данных.
person Talvalin    schedule 19.02.2014
comment
Я действительно подключаю эти данные к таблице. Есть ли в таблице какие-либо специализированные инструменты для выполнения той же задачи? - person user2569524; 19.02.2014
comment
Встроенная возможность ETL - это часто запрашиваемая функция для Tableau Desktop и вполне может появиться в будущей версии продукта, но пока это просто надстройка Excel. - person Talvalin; 19.02.2014


Просто чтобы убедиться, что вы знаете об этой функции Tableau:

После того, как вы разработали оператор SQL select, который будет разворачивать данные так, как вы хотите, вы можете указать Tableau использовать его вместо select *, отредактировав соединение с данными и выбрав опцию Custom SQL.

Общий способ отмены поворота в вашей ситуации - объединить несколько операторов select, если ваша база данных не предлагает более эффективную альтернативу, как описано в записи блога, которую цитирует Реванайя.

person Alex Blakemore    schedule 20.02.2014

Следующее будет работать для заранее известного статического набора показателей:

SELECT
  t.Date,
  x.Metric,

  CASE x.Metric
    WHEN 'metric1' THEN metric1_week
    WHEN 'metric2' THEN metric2_week
  END AS week_val,

  CASE x.Metric
    WHEN 'metric1' THEN metric1_13week
    WHEN 'metric2' THEN metric2_13week
  END AS "13week_val"

FROM
  atable AS t
CROSS JOIN
  (VALUES ('metric1'), ('metric2')) AS x (Metric)
;

Чтобы учесть неизвестное количество метрик. Для этого вам нужно будет прочитать метаданные (возможно, _2 _ системное представление) для создания динамических битов, которые представляют собой список VALUES и два выражения CASE, перед их внедрением в запрос.

person Andriy M    schedule 25.02.2014