如何在Snowflake中对每日销售数据进行规范化(列转行)
在Snowflake中实现销售数据的列转行转换
问题描述
现有每日销售数据集结构如下:
| Product_ID | Mon_Sales | Tue_Sales | Wed_Sales |
|---|---|---|---|
| A001 | 30 | 40 | 50 |
| A002 | 10 | 20 | 30 |
| A003 | 30 | 60 | 90 |
需要将其转换为以下窄表结构:
| Product_ID | Day_of_Sales | Units_Sold |
|---|---|---|
| A001 | Mon_Sales | 30 |
| A001 | Tue_Sales | 40 |
| A001 | Wed_Sales | 50 |
| A002 | Mon_Sales | 10 |
| A002 | Tue_Sales | 20 |
| A002 | Wed_Sales | 30 |
| A003 | Mon_Sales | 30 |
| A003 | Tue_Sales | 60 |
| A003 | Wed_Sales | 90 |
解决方案
在Snowflake中,使用UNPIVOT语法可以直接实现这种宽表转窄表的需求,这是处理列转行场景的标准方式。
执行SQL
SELECT Product_ID, Day_of_Sales, Units_Sold FROM your_sales_table -- 替换为你的实际表名 UNPIVOT ( Units_Sold FOR Day_of_Sales IN (Mon_Sales, Tue_Sales, Wed_Sales) ) AS unpivoted_result;
代码解释
UNPIVOT子句里,Units_Sold是用来存储原表中销售数值的新列名;Day_of_Sales是用来存储原表日期列名称(比如Mon_Sales)的新列名;IN括号内列出所有需要转换的日期销售列,后续如果有更多日期列(比如Thu_Sales),直接添加到括号里即可。
内容的提问来源于stack exchange,提问作者Kunal Rane
相关产品推荐
相关产品推荐

