在单个SQL选择查询中查询速率的最优方法是什么?



我正在开发一个执行SQL select语句以获取报告数据的平台。

我需要编写一个查询,返回表A的所有列,加上一些计算列。
计算列是与表B中的单列相乘,对不同的B行重复几次,用常数标识,即

SELECT 
A.Column1, 
A.Column2, 
A.Column1 * B1.Rate as Column1_Rate1,
A.Column2 * B1.Rate as Column2_Rate1,
A.Column1 * B2.Rate as Column1_Rate2,
A.Column2 * B2.Rate as Column2_Rate2
FROM TableA A
LEFT JOIN TabelB B1 on B1.ID = 'ID1'
LEFT JOIN TabelB B2 on B2.ID = 'ID2'

我的问题是-写这样一个查询的最佳方式是什么,考虑到:
我正在使用MSSQL 2019。
我不能使用存储过程(如果可以,我会将速率查找移到单独的语句中,我认为这将是最优的)。
该查询将成为另一个select语句的子查询,该语句将只从中选择列的子集,例如

SELECT Column1, Column1_Rate1 FROM (^ABOVE QUERY^)

我可以建议下一个方法:由于汇率表没有链接到数据表,您可以通过一个查询获取汇率,然后使用交叉连接:

SELECT 
A.Column1, 
A.Column2, 
A.Column1 * Rate1 as Column1_Rate1,
A.Column2 * Rate1 as Column2_Rate1,
A.Column1 * Rate2 as Column1_Rate2,
A.Column2 * Rate2 as Column2_Rate2
FROM TableA A
CROSS JOIN (
SELECT 
MIN(CASE WHEN ID = 'ID1' THEN Rate END) Rate1,
MIN(CASE WHEN ID = 'ID2' THEN Rate END) Rate2
FROM TableB WHERE ID IN ('ID1', 'ID2')
) Rates

在线测试MS SQL 2019查询

或使用CTE:

WITH Rates AS (
SELECT 
MIN(CASE WHEN ID = 'ID1' THEN Rate END) Rate1,
MIN(CASE WHEN ID = 'ID2' THEN Rate END) Rate2
FROM TableB WHERE ID IN ('ID1', 'ID2')
) SELECT 
A.Column1, 
A.Column2, 
A.Column1 * Rate1 as Column1_Rate1,
A.Column2 * Rate1 as Column2_Rate1,
A.Column1 * Rate2 as Column1_Rate2,
A.Column2 * Rate2 as Column2_Rate2
FROM Rates, TableA A;

相关内容

  • 没有找到相关文章

最新更新