Как создать новые столбцы со значениями количества на основе значений из другого столбца SQL - PullRequest
0 голосов
/ 28 сентября 2018

Я использую Big Query, и моя таблица выглядит следующим образом:

ID Месяц Значения

1234 Авг P
1234 Сен P
3456 Авг D
3456, сентябрь D
4567, август P
4567, сентябрь D

Я хочу создать новый столбец для каждого месяца, а идентификатор, содержащий P, D в качестве имен столбцов и их значения, представляет собой их количество для каждогоID и месяц.Как показано ниже:

ID Месяц PD
1234 авг 1 0
1234 сент. 1 0
3456 авг 0 1
3456 сент. 0 1
4567 авг 1 0
4567 сент. 1 1

1 Ответ

0 голосов
/ 28 сентября 2018

Ниже для BigQuery Standard SQL

#standardSQL
SELECT id, month, IF(value='P', 1, 0) AS p, IF(value='D', 1, 0) AS d
FROM `project.dataset.table`

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

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1234 id, 'Aug' month, 'P' value UNION ALL
  SELECT 1234, 'Sept', 'P' UNION ALL
  SELECT 3456, 'Aug', 'D' UNION ALL
  SELECT 3456, 'Sept', 'D' UNION ALL
  SELECT 4567, 'Aug', 'P' UNION ALL
  SELECT 4567, 'Sept', 'D' 
)
SELECT id, month, IF(value='P', 1, 0) AS p, IF(value='D', 1, 0) AS d
FROM `project.dataset.table`
-- ORDER BY id

с результатом

Row id      month   p   d    
1   1234    Aug     1   0    
2   1234    Sept    1   0    
3   3456    Aug     0   1    
4   3456    Sept    0   1    
5   4567    Aug     1   0    
6   4567    Sept    0   1     

InВ случае, если в вашей таблице есть повторяющиеся строки, и вам нужно посчитать значения, а не просто представить их (как в запросе выше), вы можете использовать приведенный ниже пример

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1234 id, 'Aug' month, 'P' value UNION ALL
  SELECT 1234, 'Sept', 'P' UNION ALL
  SELECT 1234, 'Sept', 'P' UNION ALL
  SELECT 3456, 'Aug', 'D' UNION ALL
  SELECT 3456, 'Sept', 'D' UNION ALL
  SELECT 4567, 'Aug', 'P' UNION ALL
  SELECT 4567, 'Sept', 'D' 
)
SELECT id, month, COUNTIF(value='P') AS p, COUNTIF(value='D') AS d
FROM `project.dataset.table`
GROUP BY id, month
-- ORDER BY id, month    

с результатом

Row id      month   p   d    
1   1234    Aug     1   0    
2   1234    Sept    2   0    
3   3456    Aug     0   1    
4   3456    Sept    0   1    
5   4567    Aug     1   0    
6   4567    Sept    0   1    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...