BigQuery - 具有成本拆分的部分枢轴

问题描述 投票:0回答:1

我有一张像这样的桌子:

身份证 类型 姓名 成本
a1 顾客 约翰 2
a1 顾客 杰克 2
a1 客户 弗兰克 2
a1 环境 开发 6
a1 销售 6
a2 顾客 安东尼 3
a2 顾客 杰夫 3
a2 客户 标记 3
a2 客户 约翰 3
a2 顾客 杰克 3
a2 环境 测试 7.5
a2 环境 开发 7.5
a2 销售 部分 15

我需要以这样的方式对其进行转换,使类型成为列,并且成本如下所示:

身份证 客户 环境 销售 成本
a1 约翰 开发 2
a1 杰克 开发 2
a1 弗兰克 开发 2
a2 安东尼 测试 部分 1.5
a2 杰夫 测试 部分 1.5
a2 标记 测试 部分 1.5
a2 约翰 测试 部分 1.5
a2 杰克 测试 部分 1.5
a2 安东尼 开发 部分 1.5
a2 杰夫 开发 部分 1.5
a2 标记 开发 部分 1.5
a2 约翰 开发 部分 1.5
a2 杰克 开发 部分 1.5

我这样使得成本总和与表1中的数字一致。 我不确定是否可以通过某种枢轴或某种连接来获得它。

谢谢

google-bigquery pivot
1个回答
0
投票

使用以下方法

SELECT 
  ID,
  customer,
  environment,
  sales,
  cost / COUNT(DISTINCT environment) OVER(PARTITION BY ID) AS cost
FROM UNNEST(ARRAY(SELECT AS STRUCT ID, name AS customer, cost FROM your_table WHERE type = 'customer'))
JOIN UNNEST(ARRAY(SELECT AS STRUCT ID, name AS environment FROM your_table WHERE type = 'environment')) USING(ID)
JOIN UNNEST(ARRAY(SELECT AS STRUCT ID, name AS sales FROM your_table WHERE type = 'sales')) USING(ID)  

如果应用于问题中的样本数据 - 输出为

© www.soinside.com 2019 - 2024. All rights reserved.