在BigQuery中将列转置为行

3

对于BigQuery,我该如何将列“Ds Hrc Shm”、“Ds Orc Cwp”等转换为行,并将“sku”内部的行转换为列,并保持值相同。

来自:

   SKU     | Ds Hrc Shm  | Ds Orc Cwp  | Ds Orc Mwp  
DB-MIX-HTS        1             1              1
DB-ORC-TUS        0             1              1

INTO

          DB-MIX-HTS | DB-ORC-TUS 
Ds Hrc Shm      1           0
Ds Orc Cwp      1           1
Ds Orc Mwp      1           1
  

我应该使用数据透视表/反向数据透视表还是其他简单的方法?

我尝试使用数据透视表,但是我无法在IN内部声明列标题。

SELECT *
FROM
(
SELECT `manual_input.sku_translations`.`ds_hrc_shm` AS `ds_hrc_shm`, 
`manual_input.sku_translations`.`sku` AS `sku_1`,
 FROM `manual_input.sku_translations`
 ) 
 PIVOT
(
 SUM(`ds_hrc_shm`) FOR `sku_1` IN (['DB-ORC-TWS'], ['DB-MIX-SGT'])
 ) 

这是数据的样本


透视表是将行转换为列。而反透视表则是将列转换为行。选择反透视表。 - Mr.Batra
这个回答解决了你的问题吗?如何在BigQuery中进行反转操作? - user15846476
1个回答

4

考虑以下方法

select * from (
  select * replace(replace(SKU, '-', '_') as SKU)
  from `manual_input.sku_translations`
  unpivot (value for col in (`Ds Hrc Shm`, `Ds Orc Cwp`, `Ds Orc Mwp`))
)
pivot (any_value(value) for SKU in ('DB_MIX_HTS', 'DB_ORC_TUS'))    

如果要将样本数据应用于您的问题,则需进行以下步骤:

with `manual_input.sku_translations` as (
  select 'DB-MIX-HTS' SKU, 1 as `Ds Hrc Shm`, 1 as `Ds Orc Cwp`, 1 as `Ds Orc Mwp` union all
  select 'DB-ORC-TUS', 0, 1, 1
)           

输出是

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接