2 个表的 SQL JOIN,有 2 个和

问题描述 投票:0回答:1

我有表 1,我正在选择产品代码的子集。 我有 TABLE2,其中包含我想要计算的满足 ColumnA 条件 X 的产品的每日实例。我还想计算满足 ColumnA 条件 Y 的相同产品的实例。

我认为一个简单的左连接就可以做到这一点,这样我就可以看到 TABLE1 中的所有子集,并且只从 TABLE2 中计数,但是每当我放置日期过滤器或放置条件语句时,它都会表现为内部连接。

理想情况下,我的输出看起来像这样

日期 产品 X
1/1 AAA 5 10
1/1 BBB 0 0
1/1 CCC 3 5
1/1 DD 0 0
1/1 EEE 0 0

我需要在 1 个语句中执行此操作,因为我无法创建一个表来保存它们。 我一直在尝试(不成功)是在 Table1 到 Table2 上进行左连接。 我为条件 X 选择所需的日期、产品代码以及产品代码的数量。 在我的 WHERE 中,我请求表 2 中的日期,并通过冗长的 IN 语句引入我的产品子集。

SELECT ProductDate, ProductCode, COUNT(ProductCode)
FROM TABLE1
LEFT JOIN TABLE2  on ProductCode
WHERE TABLE2.DATE='1/1' AND TABLE1.Product IN('AAA','BBB','CCC','DDD','EEE')

但是,我的输出是 INNER JOIN 的输出。

日期 产品 X
1/1 AAA 5 10
1/1 CCC 3 5

如有任何帮助,我们将不胜感激。

sql sql-server
1个回答
0
投票
SELECT t1.ProductDate, t1.ProductCode
    , SUM(CASE WHEN t2.ColumnA = X THEN 1 END) As X
    , SUM(CASE WHEN t2.ColumnA = Y THEN 1 END) As Y
FROM TABLE1 t1
LEFT JOIN TABLE2 t2 ON t1.ProductCode=t2.ProductCode
    AND t2.DATE='1/1'
WHERE t1.ProductCode IN('AAA','BBB','CCC','DDD','EEE')
GROUP BY t1.ProductCode
© www.soinside.com 2019 - 2024. All rights reserved.