如何将两个无关SQL表的查询结果列相乘得到新列?
无关联表列相乘的SQL实现方案
交叉连接完全可行,只要确保从ODS.PS_RT_RATE_TBL获取的svb_rate是单一行(毕竟是对应CURRENT_DATE的汇率,通常只会有一条记录),就能得到预期结果。
方法1:子查询嵌套写法
SELECT f.PRINCIPAL_BAL_NET, r.svb_rate, f.PRINCIPAL_BAL_NET * r.svb_rate AS calculated_amount FROM FRDS_LOANS_MV f CROSS JOIN (SELECT svb_rate FROM ODS.PS_RT_RATE_TBL -- 替换date_column为表中实际存储日期的列名 WHERE date_column = CURRENT_DATE) r;
方法2:CTE(公共表表达式)写法(更易读)
WITH daily_rate AS ( SELECT svb_rate FROM ODS.PS_RT_RATE_TBL -- 替换date_column为表中实际存储日期的列名 WHERE date_column = CURRENT_DATE ) SELECT f.PRINCIPAL_BAL_NET, dr.svb_rate, f.PRINCIPAL_BAL_NET * dr.svb_rate AS calculated_amount FROM FRDS_LOANS_MV f CROSS JOIN daily_rate dr;
注意事项
如果ODS.PS_RT_RATE_TBL中CURRENT_DATE对应的svb_rate有多行记录,交叉连接会产生笛卡尔积(结果行数=贷款表行数×汇率表匹配行数),这大概率不符合业务需求。这种情况下,需要先确保子查询/CTE只返回一行数据,比如:
-- 示例:取最新的汇率 SELECT svb_rate FROM ODS.PS_RT_RATE_TBL WHERE date_column = CURRENT_DATE ORDER BY update_time DESC -- 假设存在更新时间列 LIMIT 1; -- 或者用聚合函数(按业务逻辑选择MAX/MIN/AVG等) SELECT MAX(svb_rate) AS svb_rate FROM ODS.PS_RT_RATE_TBL WHERE date_column = CURRENT_DATE;
内容的提问来源于stack exchange,提问作者Pavan Vasan
相关产品推荐
相关产品推荐

