SQL如何生成统一公共键实现双向外汇货币对分组统计
货币对公共分组键生成方案
实现思路
无需使用自连接(会导致数据冗余、性能下降),仅需对每行的兑换双方符号做统一规则的拼接,即可保证正反方向的同一货币对生成完全相同的公共键:
- 若兑换双方包含USD,统一将USD放在前缀位置,拼接成「USD+其他币种_其他币种+USD」的固定格式
- 其余币种统一按规则绑定USD生成键即可
- 按预期输出要求对SourceAmount统一取负值
可直接运行的SQL代码
SELECT -- 生成统一公共键 CASE WHEN Symbol_from = 'USD' THEN CONCAT('USD', Symbol_to, '_', Symbol_to, 'USD') WHEN Symbol_to = 'USD' THEN CONCAT('USD', Symbol_from, '_', Symbol_from, 'USD') -- 其余非USD配对场景按需求扩展,示例默认归为其他类 ELSE CONCAT('USD', Symbol_from, '_', Symbol_from, 'USD') END AS Common_String_Key, Tradedate, Symbol_from, -SourceAmount AS SourceAmount, Symbol_to AS DestSymbol_To, TradeAmount FROM FX_Buy_Sell ORDER BY Common_String_Key, Tradedate;
补充说明
你给出的预期结果中USDGBP_BGPUSD属于笔误,正确应为USDGBP_GBPUSD,EURO对应公共键为USDEURO_EUROUSD,若需要和你示例的下划线格式对齐,调整拼接逻辑中的分隔符即可。
内容的提问来源于stack exchange,提问作者Jibberman
相关产品推荐
相关产品推荐

