[英]How to use columns from the left table in where clause in the right select statement in SQL Server join statement
我想用 select 语句的 output 连接一个表,我需要在 select 语句的WHERE
子句中使用 Table1 中的last_order_date
列。
例如,请参阅此屏幕截图:
我尝试了以下代码:
SELECT
*
FROM
Table1 t1
LEFT JOIN
(SELECT prod_id, SUM(sales) sales_sum
FROM Table2
WHERE transaction_date BETWEEN t1.last_order_date AND CAST(GETDATE()-1 AS DATE)
GROUP BY prod_id) t2
ON t1.prod_id = t2.prod_id
显然,问题是我不能在连接语句右侧的 WHERE 子句中使用t1.last_order_date
。 任何人都可以帮忙吗?
您可以尝试使用OUTER APPLY
SELECT *
FROM
Table1 t1
OUTER APPLY
(
SELECT t2.prod_id, SUM(t2.sales) sales_sum
FROM Table2 t2
WHERE t2.transaction_date BETWEEN t1.last_order_date AND CAST(GETDATE()-1 AS DATE)
AND t1.prod_id = t2.prod_id
GROUP BY t2.prod_id
) t2
根据您的预期结果,我认为您可以像这样使用LEFT JOIN
。
SELECT t1.prod_id,
MIN(t1.last_order_date) last_order_date,
SUM(ISNULL(t2.sales,0)) sales
FROM
Table1 t1
LEFT JOIN Table2 t2
ON t2.transaction_date BETWEEN t1.last_order_date
AND CAST(GETDATE()-1 AS DATE)
AND t1.prod_id = t2.prod_id
GROUP BY t1.prod_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.