我有表1,我正在 Select 产品代码的子集. 我有表2,其中有我想要计数的那些满足列A条件X的产品的日常实例.我还想计算满足列A条件Y的相同产品的实例.

我以为一个简单的左连接就可以做到,这样我就可以看到表1中的所有子集,而只计数表2中的所有子集,但是每当我放置一个日期过滤器或放置条件语句时,它的行为就像一个内部连接.

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

Date Product X Y
1/1 AAA 5 10
1/1 BBB 0 0
1/1 CCC 3 5
1/1 DDD 0 0
1/1 EEE 0 0

我需要在1个语句中执行此操作,因为我无法创建一个表来保存它们. 我一直在try (没有成功)的是我在表1到表2上做一个左连接. 我 Select 我想要的日期、产品代码和条件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')

然而,我的输出是一个内在的join.

Date Product X Y
1/1 AAA 5 10
1/1 CCC 3 5

任何帮助将不胜感激.

推荐答案

SELECT t2.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, t2.ProductDate

Sql相关问答推荐

JSON列之间的Postgr聚合

如何在Snowflake SQL存储过程中传递LIMIT和OFFSET的参数?

连接特定行号

从依赖于其他表的值的XREF表中的值分组获得正确的计数?

在Oracle SQL中将列值转换为行

了解放置时的连接

最近3个月收到的邮箱总数

如果多行科目有一行在指定的日期范围内,如何 Select 该科目在该日期之前的所有行?

使用多个嵌套数组查询JSON数据

删除所有订单中可用的重复值

SQL仅返回第一个字母在A-Z之间的值

SQL:如果一个表中的日期在另一个表的日期的12个月内,则为是或否

什么是 100.它与 100 有什么区别?

将varchar (7)列转换为datetime

SQL的左连接在多对多关系情况下使用

Select 多年的日期范围

如何筛选 GROUP BY 结果? HAVING 没有产生预期的结果

以 15 分钟为间隔的使用情况SQL 查询

来自 SQL Server 的树层次 struct 图的 JSON

查找距上一条记录大于或等于 30 天的记录