我有两个表T_VEN和T_COM。 在第一个中,我有几种产品的销售日期,在第二个中,我有这些产品每天的成本。 我想加入表格以告知产品在销售当天的成本,但是当当天没有成本时,我希望它找到前一天的成本。
例如:(日期采用 DD/MM/YYYY 格式)
T_VEN
产品 | 日期 |
---|---|
1 | 2024年1月2日 |
1 | 2024年2月2日 |
2 | 2024年2月2日 |
1 | 2024年3月2日 |
T_COM
产品 | 日期 | 成本 |
---|---|---|
1 | 2024年1月2日 | 2.50 |
1 | 2024年2月2日 | 3.50 |
2 | 2024年1月2日 | 4.50 |
产品 | 日期 | 成本 |
---|---|---|
1 | 2024年1月2日 | 2.50 |
1 | 2024年2月2日 | 3.50 |
2 | 2024年2月2日 | 4.50 |
1 | 2024年3月2日 | 3.50 |
我尝试过以各种方式进行连接、子查询、使用 group by 提取最大值、使用 casewhen 子句连接等,但我遇到了困难。我可以轻松地在 Excel 中使用 XLOOKUP 函数连接 Match_mode = -1(完全匹配或下一个更小的值。如果未找到完全匹配,则返回下一个更小的值)。
您可以使用以下方法 连接产品和日期的表,然后使用子查询处理缺失的成本
SELECT
T_VEN.PROD,
T_VEN.DATE,
COALESCE(T_COM.COST, (
SELECT TOP 1 T_COM_SUB.COST
FROM T_COM AS T_COM_SUB
WHERE T_COM_SUB.PROD = T_VEN.PROD
AND T_COM_SUB.DATE < T_VEN.DATE
ORDER BY T_COM_SUB.DATE DESC
)) AS COST
FROM
T_VEN
LEFT JOIN
T_COM
ON
T_VEN.PROD = T_COM.PROD
AND T_VEN.DATE = T_COM.DATE;
谢谢