我使用的是大型查询,我的表如下所示:
ID月份值 1234年8月P 1234 9月P 3456 8月D 3456 9月D 4567 8月P 9月4567 d
我希望为每个月生成新的列,包含P、D作为列名的ID和值是每个ID和月份的计数。如下所示:
ID月P 1234 8月1日0 1234 9月1 0 3456 8月0 1 3456 9月0 1 4567 8月1日0 9月1日
发布于 2018-09-28 18:14:39
下面是用于BigQuery标准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 如果表中有重复的行,并且需要计数值与只显示它们(如上面的查询中所示),则可以使用下面的示例
#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 https://stackoverflow.com/questions/52560681
复制相似问题