如何解决SQL-分组以创建新列
早上好
我在这个问题上有些困惑,我想知道是否有可能按一列进行分组,以从新的动态列中获得该列的其余列。
我将尝试用一个例子来解释这个问题:
例如:
+-------+---------+-----+------+
| Class | Name | Age | Size |
+-------+---------+-----+------+
| 1 | Pepe | 10 | S |
| 1 | Antonio | 12 | M |
| 2 | Rosa | 13 | M |
| 2 | Antonio | 13 | S |
| 2 | Amparo | 12 | S |
| ... | ... | ... | ... |
| n | n | n | n |
+-------+---------+-----+------+
以这种方式获得结果:
+-------+--------+-------+--------+------------+-------+--------+--------+-------+--------+-----+--------+-------+--------+
| Class | Name_1 | Age_1 | Size_1 | Name_2 | Age_2 | Size_2 | Name_3 | Age_3 | Size_3 | ... | Name_n | Age_n | Size_n |
+-------+--------+-------+--------+------------+-------+--------+--------+-------+--------+-----+--------+-------+--------+
| 1 | Pepe | 10 | S | Antonio | 12 | M | | | | | | | |
| 2 | Rosa | 13 | M | Antonio | 13 | S | Amparo | 12 | S | | | | |
+-------+--------+-------+--------+------------+-------+--------+--------+-------+--------+-----+--------+-------+--------+
我试图使用枢轴在BigQuery中解决它,但是我没有得到想要的结果。
提前谢谢
解决方法
results:
class combined_class
1 "name_1:Pepe,age_1:10,size_1:Pepe,name_2:Antonio,age_2:12,size_2:Antonio"
2 "name_1:Rosa,age_1:13,size_1:Rosa,age_2:13,size_2:Antonio,name_3:Amparo,age_3:12,size_3:Amparo"
#standardsql:
with data as (select 1 Class,'Pepe' Name,'10' age,'S' size
union all
select 1 Class,'Antonio' Name,'12' age,'M' size
union all
select 2 Class,'Rosa' Name,'13' age,'S' size
union all
select 2 Class,'Amparo' Name,'S' size )
SELECT
class,ARRAY_TO_STRING( combined_recs,",") combined_class
FROM (
SELECT
class,ARRAY_AGG( ARRAY_TO_STRING( [ names,ages,sizes ],")) combined_recs
FROM (
SELECT
class,CONCAT( 'name_',CAST(ROW_NUMBER() OVER (PARTITION BY class) AS String),':',name ) names,CONCAT( 'age_',age ) ages,CONCAT( 'size_',name ) sizes
FROM
DATA )
GROUP BY
1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。