首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列转换为行

将列转换为行
EN

Stack Overflow用户
提问于 2021-12-13 08:02:03
回答 3查看 137关注 0票数 0
代码语言:javascript
复制
ID Name     M   E   H   S
1   Sally   78  85  91  76
2   Edward  87  90  82  87

转换成

代码语言:javascript
复制
ID Name Subject Marks
1  Sally M       78
1  Sally E       85
1  Sally H       91
1  Sally S       76
2  Edward M       87
2  Edward E       90
2 Edward H       82
2 Edward S       87
EN

回答 3

Stack Overflow用户

发布于 2021-12-13 10:00:12

Un枢轴函数将执行您要寻找的操作,请尝试以下操作:

代码语言:javascript
复制
with sample_data as (
    SELECT 1 as id,   'Sally' as name,   78 as M,  85 as E, 91 as H,  76 as S UNION ALL
    SELECT 2,   'Edward',  87,  90, 82,  87
)

SELECT id, name, subject, marks
from sample_data
unpivot(marks for subject in (M,E,H,S));

有关不枢轴的更多信息,请参见此处的文档:运算符

票数 2
EN

Stack Overflow用户

发布于 2021-12-13 08:11:13

一种简单的方法使用了一系列的联合:

代码语言:javascript
复制
SELECT ID, Name, 'M' AS Subject, M AS Marks, 1 AS pos FROM yourTable UNION ALL
SELECT ID, Name, 'E', E, 2 FROM yourTable UNION ALL
SELECT ID, Name, 'H', H, 3 FROM yourTable UNION ALL
SELECT ID, Name, 'S', S, 4 FROM yourTable
ORDER BY ID, pos;
票数 0
EN

Stack Overflow用户

发布于 2021-12-13 21:04:14

在许多实际情况下,列的数量足够大,可以在查询中登记,甚至事先不知道--因此下面的方法涵盖了更一般的情况--您不需要预先知道列的编号和名称。

代码语言:javascript
复制
select id, name, key, value
from your_table t,
unnest([to_json_string((select as struct * except(id, name) from unnest([t])))]) json,
unnest(bqutil.fn.json_extract_keys(json)) key with offset 
join unnest(bqutil.fn.json_extract_values(json)) value with offset 
using (offset)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70331501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档