我有表 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 |
如有任何帮助,我们将不胜感激。
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