4

好的...由于某种原因,我总是在 SQL 中与 LEFT JOINS 斗争。

我有一个简单的查询

SELECT COUNT(*) as OpenedToday, c.Product_Line, c.Product_Code
FROM SFCase as c
LEFT OUTER JOIN (SELECT DISTINCT Product_Code from SFCase) as p ON p.Product_Code = c.Product_Code
WHERE IsClosed = 'false'
AND DATEPART(YEAR, GETDATE()) = DATEPART(YEAR, CreatedDate)
AND DATEPART(MONTH, GETDATE()) = DATEPART(MONTH, CreatedDate)
AND DATEPART(DAY, GETDATE()) = DATEPART(DAY, CreatedDate)
GROUP BY c.Product_Line, c.Product_Code

我期待的是所有 Product_Code 的列表,其中包含了 OpenedToday 的数量(包括零值)。相反,我只得到了今天开箱的那些产品代码的列表(只有正值)。

当我只运行 DISTINCT Product_Code 时,我得到 70 个结果显示。但是,运行完整的查询,我今天只得到 4 个。我想查看所有 70 个结果,如果今天没有打开任何案例,则为零。

我对这个加入做错了什么?

查理

4

2 回答 2

2

尝试:

SELECT SUM(CASE WHEN IsClosed='false' AND DATEDIFF(DAY, GETDATE(), CreatedDate)=0 
                THEN 1 ELSE 0 END) as OpenedToday, 
       Product_Line, Product_Code
FROM SFCase
GROUP BY Product_Line, Product_Code
于 2013-07-08T15:30:30.517 回答
1
SELECT  p.Product_Line, p.Product_Code,COUNT(*) as OpenedToday
FROM SFCase as c
RIGHT OUTER JOIN (SELECT DISTINCT Product_Code from SFCase) as p 
ON p.Product_Code = c.Product_Code
GROUP BY p.Product_Line, p.Product_Code
于 2013-07-08T15:13:52.297 回答