在单个 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;
我正在一个平台上工作,该平台执行 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;