繁体   English   中英

如何在SQL Server join 语句中的where 子句中使用左侧表中的列在右侧的select 语句中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM