在单个 SQL select 查询中进行费率查找的最佳方法是什么?

What is the most optimal approach for a rate lookup in single SQL select query?

我正在一个平台上工作,该平台执行 SQL select 语句以获取报告数据。

我需要编写一个查询,其中 returns 来自 table A 的所有列,加上一些计算列。
计算出的列与 table 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^)

我可以建议下一个方法: 因为 table 的比率未链接到数据 table 您可以通过一个查询获取比率,然后使用交叉连接:

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

Test MS SQL 2019 queries online

或使用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;