Создайте представление в BigQuery, которое выравнивает таблицу

У меня есть таблица в BigQuery, которая показывает данные в следующей структуре:

+------------+---------+-----------+-----------+
|    Date    | Product | CostPrice | SalePrice |
+------------+---------+-----------+-----------+
| 01/01/2018 | hat     |        10 |        20 |
| 01/01/2018 | shoe    |         5 |        12 |
| 01/02/2018 | hat     |        11 |        22 |
| 01/02/2018 | shoe    |         6 |        13 |
+------------+---------+-----------+-----------+

Я хочу сгладить (это правильная терминология?) Данные, чтобы каждая строка имела только одну метрику. Это, очевидно, требует наличия столбца для MetricName, чтобы определить, какие показатели из первой таблицы предоставляются в каждой строке.

+------------+-------------+------------+-------------+
|    Date    | Product     | MetricName | MetricValue |
+------------+-------------+------------+-------------+
| 01/01/2018 | hat         | CostPrice  |          10 |
| 01/01/2018 | hat         | SalePrice  |          20 |
| 01/01/2018 | shoe        | CostPrice  |           5 |
| 01/01/2018 | shoe        | SalePrice  |          12 |
| 01/02/2018 | hat         | CostPrice  |          11 |
| 01/02/2018 | hat         | SalePrice  |          22 |
| 01/02/2018 | shoe        | CostPrice  |           6 |
| 01/02/2018 | shoe        | SalePrice  |          13 |
+------------+-------------+------------+-------------+

Я не уверен, как создать SQL-запрос, который позволил бы достичь этого?

Спасибо,

J.Ayo

Спасибо за редактирование, Йогеш. Как вы так быстро изменили ASCII? Есть ли инструмент, который может это сделать?

J. Ayo 13.07.2018 15:02
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ниже приведен стандартный SQL BigQuery.

#standardSQL
SELECT Date, Product, 'CostPrice' AS MetricName, CostPrice AS MetricValue
FROM `project.dataset.table` UNION ALL
SELECT Date, Product, 'SalePrice' AS MetricName, SalePrice AS MetricValue
FROM `project.dataset.table`    

Вы можете протестировать, поиграть с приведенным выше, используя фиктивные данные из вашего вопроса, как показано ниже.

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '01/01/2018' Date, 'hat' Product, 10 CostPrice, 20 SalePrice UNION ALL
  SELECT '01/01/2018', 'shoe', 5, 12 UNION ALL
  SELECT '01/02/2018', 'hat', 11, 22 UNION ALL
  SELECT '01/02/2018', 'shoe', 6, 13 
)
SELECT Date, Product, 'CostPrice' AS MetricName, CostPrice AS MetricValue
FROM `project.dataset.table` UNION ALL
SELECT Date, Product, 'SalePrice', SalePrice
FROM `project.dataset.table`   

Другой вариант, чтобы избежать использования UNION ALL (поскольку для этого требуется некоторый избыточный код), приведен ниже.

#standardSQL
SELECT DATE, Product, MetricName, MetricValue
FROM `project.dataset.table`,
UNNEST([STRUCT<MetricName STRING, MetricValue INT64>
  ('CostPrice', CostPrice), ('SalePrice', SalePrice)])

Другие вопросы по теме