SQL中实现表格逆透视(Unpivoting)转换需求
表格格式转换解决方案
假设你的目标是将原表格中报告货币和交易货币的金额与货币代码合并,并按货币类型整理为更清晰的结构(常见的转换需求),以下是几种实用实现方式:
方法1:Excel Power Query(无代码办公场景首选)
- 选中原表格数据,进入「数据」选项卡 → 「从表格/区域」
- 在Power Query编辑器中,选中
CompanyName列,点击「转换」→「逆透视列」→「逆透视其他列」 - 右键生成的「属性」列,选择「拆分列」→「按分隔符」,自定义输入
Currency,拆分到最左侧 - 此时得到「属性.1」(对应Reporting/Transaction)和「属性.2」(对应Amount/Code),选中
CompanyName和「属性.1」列,点击「转换」→「透视列」,值列选「值」,列名选「属性.2」 - 添加自定义列合并金额与货币代码:
= [Amount] & " " & [CurrencyCode],最后修改列名并上载数据即可。
方法2:Python Pandas(批量处理场景)
import pandas as pd # 读取原表格(以CSV为例) df = pd.read_csv("your_source_table.csv") # 重塑数据,将两种货币的列转为行结构 melted_df = pd.melt( df, id_vars=["CompanyName"], value_vars=[ "ReportingCurrencyAmount", "ReportingCurrencyCode", "TransactionCurrencyAmount", "TransactionCurrencyCode" ], var_name="CurrencyInfo", value_name="Value" ) # 拆分类型与字段信息 melted_df[["CurrencyType", "Field"]] = melted_df["CurrencyInfo"].str.split("Currency", expand=True) # 透视合并金额与货币代码 pivoted_df = melted_df.pivot( index=["CompanyName", "CurrencyType"], columns="Field", values="Value" ).reset_index() # 生成带货币的金额列 pivoted_df["AmountWithCurrency"] = pivoted_df["Amount"].astype(str) + " " + pivoted_df["Code"] # 整理最终列顺序 final_df = pivoted_df[["CompanyName", "CurrencyType", "AmountWithCurrency"]] # 输出或保存结果 print(final_df) # final_df.to_csv("target_table.csv", index=False)
方法3:SQL(数据库内数据转换)
若数据存储在数据库中,可通过UNION ALL拆分两行实现:
SELECT CompanyName, 'Reporting' AS CurrencyType, CONCAT(ReportingCurrencyAmount, ' ', ReportingCurrencyCode) AS AmountWithCurrency FROM currency_table UNION ALL SELECT CompanyName, 'Transaction' AS CurrencyType, CONCAT(TransactionCurrencyAmount, ' ', TransactionCurrencyCode) AS AmountWithCurrency FROM currency_table ORDER BY CompanyName, CurrencyType;
如果你的目标格式是将两种货币信息保留在同一行,直接用Excel公式即可快速实现:
- 报告货币合并列:
=B2&" "&C2 - 交易货币合并列:
=D2&" "&E2
之后保留需要的列即可。
内容的提问来源于stack exchange,提问作者Greencolor
相关产品推荐
相关产品推荐

