2013-07-17 64 views
-1

我有一个查询要捕获部件的销售。我期望从Parts表中获得完整结果,并且如果在该时间段内没有该部分的Sales,我希望在Sales列中看到0。我没有看到。我只是拿到销售部分。T-SQL查询未返回正确的结果

SELECT 
    Part, 
    Sum(Sales) 
FROM 
    dbo.Parts 
    LEFT OUTER JOIN 
    dbo.SalesData ON Part = Part 
WHERE 
    SalesDate > '2011-12-31' 
GROUP BY 
    Part 
ORDER BY 
    Part 

我在做什么错?

+0

除部分是只在一个表则是模糊的。如果部分只在一个表中,那么该连接是交叉连接。 – Paparazzi

+0

我明白这一点。我只是简化了代码,以便听到问题的答案。 – tsqln00b

+0

无效语法无法获得问题的“听到” – Paparazzi

回答

1

我相信这是因为你的WHERE子句删除所有没有销售的零件,因为它们没有销售日期。

尝试: -

SELECT 
    Part, 
    Sum(Sales) 
FROM 
    dbo.Parts 
    LEFT OUTER JOIN 
    dbo.SalesData ON Part = Part 
    AND SalesDate > '2011-12-31' 
GROUP BY 
    Part 
ORDER BY 
    Part 
+0

他是对的: 您可以使用'AND COALESCE(salesdate,CURRENT_TIMESTAMP)>'2011-12-31'',这将使输出显示每个销售额部分在目录中,是否有实际销售。 – Curt

+0

是的。主要问题是WHERE条件。我没有提供严格的表格字段名称,因为我不想给任何东西以防万一我的公司生气。 – tsqln00b