如何关联首列并通过Unpivot实现宽表转窄表?
解决方案
你可以通过以下两种正确的SQL写法实现需求:
方法一:使用UNION ALL
这种方法逻辑直观,分别提取每个日期列的数据后合并:
SELECT CASA, '31-jan-2023' AS Date, "31-jan-2023" AS Deposit FROM casadeposits UNION ALL SELECT CASA, '28-Feb-2023' AS Date, "28-Feb-2023" AS Deposit FROM casadeposits ORDER BY CASA, Date;
方法二:使用UNPIVOT
如果你的数据库支持UNPIVOT(如SQL Server、Oracle等),可以用更简洁的写法:
SQL Server版本
SELECT CASA, Date, Deposit FROM casadeposits UNPIVOT ( Deposit FOR Date IN ([31-jan-2023], [28-Feb-2023]) ) AS unpvt ORDER BY CASA, Date;
Oracle版本
SELECT CASA, Date, Deposit FROM casadeposits UNPIVOT ( Deposit FOR Date IN ("31-jan-2023", "28-Feb-2023") ) ORDER BY CASA, Date;
注意事项:
- 替换
casadeposits为你实际的表名 - 日期列名作为字段名时,需要用对应数据库的转义符包裹(SQL Server用
[],Oracle用"") - 执行后按
CASA和Date排序即可得到预期的输出结构
内容的提问来源于stack exchange,提问作者Nauman Khan
相关产品推荐
相关产品推荐

