Snowflake数据透视需求咨询:行转列及关联适配
Snowflake 列转行(逆透视)实现方案
针对你需要将多列排名转换为行记录的需求,Snowflake的UNPIVOT语法可以直接实现,以下是具体的SQL语句:
SELECT company_name, company_id, rank_type, rank_value FROM Company_rank UNPIVOT ( rank_value FOR rank_type IN ( Public_rank AS 'Public_rank', Peer_rank AS 'Peer_rank', Online_rank AS 'Online_rank' ) ) AS unpivoted_data;
代码说明:
UNPIVOT子句负责将指定的列(Public_rank、Peer_rank、Online_rank)转换为行记录rank_value是转换后存储排名数值的字段名rank_type是转换后存储排名类型的字段名,通过AS指定对应的类型名称- 执行后会为每个公司生成3条记录,每条记录对应一种排名类型
预期输出结果:
| COMPANY_NAME | COMPANY_ID | RANK_TYPE | RANK_VALUE |
|---|---|---|---|
| ABCCompany | 1 | Public_rank | 20 |
| ABCCompany | 1 | Peer_rank | 35 |
| ABCCompany | 1 | Online_rank | 15 |
| BCDCompany | 2 | Public_rank | 25 |
| BCDCompany | 2 | Peer_rank | 32 |
| BCDCompany | 2 | Online_rank | 20 |
| DEFCompany | 3 | Public_rank | 18 |
| DEFCompany | 3 | Peer_rank | 20 |
| DEFCompany | 3 | Online_rank | 25 |
这个结果结构可以直接和包含ranking_name、company_id的表进行关联。
内容的提问来源于stack exchange,提问作者Rumbaba
相关产品推荐
相关产品推荐

