BigQuery中的枢轴/Undivot

发布于 2025-02-11 01:10:29 字数 1575 浏览 5 评论 0原文

我需要更改以下产品层次结构bigquery表的结构: 应

当前

Salesorgister_chan材料hier_lvlprod_hiertxt
ph0120680483PRODH1PH菲律宾
PH0120680483PODH2PHGR杂货店
杂货店20680483PH01杂货店Mayo
20使用PHGRGR731Q27Eden
BigQuerySQL
680483prodh6phgrgr731q27p410sprave
8048320680483prodh7phgrgr731q27p410pi

需要

salessorgistresor_chan材料prodh2prodh3prodh3PHILIPPINEprodh4PHILIPPINE销售prodh5Sandwich1PHGRprodh5PHGRGR
PHGR731PHGRGR731Q27P410PIPHGRGR731Q27PHGRGR731Q27P410

有办法实现这一目标吗?

I have a requirement to change the structure of Product Hierarchy Bigquery table as below:
This should be done using Bigquery SQL

Current Table:

salesorgdistr_chanmaterialhier_lvlprod_hiertxt
PH0120680483prodh1PHPhilippines
PH0120680483prodh2PHGRGrocery
PH0120680483prodh3PHGRGRGrocery
PH0120680483prodh4PHGRGR731Eden Mayo
PH0120680483prodh5PHGRGR731Q27Eden Mayo
PH0120680483prodh6PHGRGR731Q27P410Sandwich Spread
PH0120680483prodh7PHGRGR731Q27P410PIBottle

Required Table

salesorgdistr_chanmaterialprodh1prodh2prodh3prodh4prodh5prodh6prodh7prodh1txtprodh2txtprodh3txtprodh4txtprodh5txtprodh6txtprodh7txt
PH0120680483PHPHGRPHGRGRPHGRGR731PHGRGR731Q27PHGRGR731Q27P410PHGRGR731Q27P410PIPhilippinesGroceryGroceryEden MayoEden MayoSandwich SpreadBottle

Is there a way to achieve this ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酒几许 2025-02-18 01:10:29

SELECT h.*,
       txt_prodh1 AS prodh1txt,
       txt_prodh2 AS prodh2txt,
       txt_prodh3 AS prodh3txt,
       txt_prodh4 AS prodh4txt,
       txt_prodh5 AS prodh5txt,
       txt_prodh6 AS prodh6txt,
       txt_prodh7 AS prodh7txt,
  FROM (
    SELECT * EXCEPT(txt) FROM sample
  ) PIVOT (ANY_VALUE(prod_hier) FOR hier_lvl IN ('prodh1', 'prodh2', 'prodh3', 'prodh4', 'prodh5', 'prodh6', 'prodh7')) AS h
  JOIN (
    SELECT * EXCEPT(prod_hier) FROM sample
  ) PIVOT (ANY_VALUE(txt) txt FOR hier_lvl IN ('prodh1', 'prodh2', 'prodh3', 'prodh4', 'prodh5', 'prodh6', 'prodh7')) AS t
  USING (salesorg, distr_chan, material);

1

。 //i.sstatic.net/qsv20.png“ alt =”在此处输入图像描述”>

2。(另一个选项)(另一个选项)与您的删除输出不完全相同,但可以是一个选项。

SELECT * FROM (
  SELECT * EXCEPT(prod_hier, txt), STRUCT(prod_hier AS hier, txt) AS prod FROM sample
) PIVOT (ANY_VALUE(prod) FOR hier_lvl IN ('prodh1', 'prodh2', 'prodh3', 'prodh4', 'prodh5', 'prodh6', 'prodh7'));

输出:

1. Consier below query:

SELECT h.*,
       txt_prodh1 AS prodh1txt,
       txt_prodh2 AS prodh2txt,
       txt_prodh3 AS prodh3txt,
       txt_prodh4 AS prodh4txt,
       txt_prodh5 AS prodh5txt,
       txt_prodh6 AS prodh6txt,
       txt_prodh7 AS prodh7txt,
  FROM (
    SELECT * EXCEPT(txt) FROM sample
  ) PIVOT (ANY_VALUE(prod_hier) FOR hier_lvl IN ('prodh1', 'prodh2', 'prodh3', 'prodh4', 'prodh5', 'prodh6', 'prodh7')) AS h
  JOIN (
    SELECT * EXCEPT(prod_hier) FROM sample
  ) PIVOT (ANY_VALUE(txt) txt FOR hier_lvl IN ('prodh1', 'prodh2', 'prodh3', 'prodh4', 'prodh5', 'prodh6', 'prodh7')) AS t
  USING (salesorg, distr_chan, material);

output will be:

enter image description here

2. (another option) Not exactly same as your exptected output, but can be an option.

SELECT * FROM (
  SELECT * EXCEPT(prod_hier, txt), STRUCT(prod_hier AS hier, txt) AS prod FROM sample
) PIVOT (ANY_VALUE(prod) FOR hier_lvl IN ('prodh1', 'prodh2', 'prodh3', 'prodh4', 'prodh5', 'prodh6', 'prodh7'));

output:

enter image description here

无远思近则忧 2025-02-18 01:10:29

请使用以下方法

select * from your_table
pivot (
  any_value(prod_hier) prodh, any_value(txt) prodhtxt 
  for cast(replace(hier_lvl, 'prodh', '') as int64) in (1,2,3,4,5,6,7)
)           

如果应用于您的问题中的示例数据,

- 输出为

Use below approach

select * from your_table
pivot (
  any_value(prod_hier) prodh, any_value(txt) prodhtxt 
  for cast(replace(hier_lvl, 'prodh', '') as int64) in (1,2,3,4,5,6,7)
)           

if applied to sample data in your question - output is

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文