首页 > 解决方案 > 将具有 N-1 个相同列和 1 个不同列的多行合并为一行,保留前 N-1 列并对最后一列求和

问题描述

我有一个查询,它生成一个包含 26 列的表,AZ。对于某些行,AY 列是相同的,而 Z 列是唯一不同的。是否有一种简单而干净的方法来组合重复的行,使得 AY 列相同并且 Z 列相加?我的解决方案是做类似的事情

SELECT A, B, C,...,Y,SUM(Z)
-- lots of work
FROM [table produced by multiple joins]
GROUP BY A, B, C,...,Y

最后一个GROUP BY子句长。如果从SELECT语句中添加或删除列,也容易出错。这是完成我想做的事情的唯一方法吗?

标签: sqlgoogle-bigquery

解决方案


以下是 BigQuery 标准 SQL

#standardSQL
SELECT 
  ANY_VALUE((SELECT AS STRUCT t.* EXCEPT(z))).*,
  SUM(z) AS z
FROM `project.dataset.table_produced_by_multiple_joins` t
GROUP BY FORMAT('%t', (SELECT AS STRUCT t.* EXCEPT(z)))   

推荐阅读