我正在使用Big Query,我的表如下所示:
ID月值
1234年8月P
9月1234年P
3456年8月D
D 3456年9月
4567年8月P
D 4957年9月
我想为每个月生成一个新列,并且ID包含P,D作为列名,值是每个ID和月的计数。如下所示:
ID月P D
1234 Aug 1 0
1234年9月1日0
3456 8月0 1
3456 9月0 1
4567 8月1日0
4567 9月1日1
答案 0 :(得分:3)
以下是用于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