在上一篇文章中,我得到了寻找增量销售的帮助。这个查询运行得很好。我按产品添加了分组。我遇到的问题是我需要展示正在销售的新产品。如果该产品去年不存在,但我们今年正在销售它;那么它应该显示在数据表中。
我尝试在WHERE中使用CASE语句,但它导致了大量重复数据。我的想法类似于下面的内容。如何包含仅存在于本年度的项目?谢谢你的帮助,非常感谢。
不工作Where子句
WHERE
Ym.Project =
CASE
WHEN ymprev.Project IS NULL THEN ym.Project
ELSE ymprev.Project
END
下面是工作查询。
WITH ym as(
SELECT
Product
,SUM(Sales) AS Sales
,MONTH(Date) AS Month
,YEAR(Date) AS Year
FROM SalesTable
GROUP BY
YEAR(Date)
,MONTH(Date)
,Product
)
SELECT
ymprev.Project AS PrevProject
,ym.Product
,ym.Sales
,ymprev.Sales AS PreviousSales
,(ym.Sales - ymprev.Sales) AS IncrementalSales
,ymprev.Month AS PreviousMonth
,ymprev.Year AS PreviousYear
,ym.Month
,ym.Year
FROM ym
JOIN ym ymprev on
ymprev.Year = ym.Year
AND ymprev.Month = ym.Month
AND ymprev.Product = ym.Product
ORDER BY
ym.Year
,ym.Month
发布于 2014-06-23 19:25:01
您的查询是隐式使用INNER JOIN
的-这意味着您只能看到在两个数据集中有匹配的值,正如您所描述的那样。
尝试将FROM子句更改为
FROM ym
LEFT JOIN
ym ymprev on
ymprev.Year = ym.Year
AND ymprev.Month = ym.Month
AND ymprev.Product = ym.Product
您还需要在包含前一年查询中的数据元素的任何值中包含类似的逻辑。例如,需要将,(ym.Sales - ymprev.Sales) AS IncrementalSales
转换为,(ym.Sales - ISNULL(ymprev.Sales,0)) AS IncrementalSales
,否则对于只存在于本年度的任何记录,它都将返回NULL。
您的posted查询没有在CTE中包含Project
字段,所以我不能确切地说出它是如何工作的,但是posted的数据应该可以帮助您开始。
https://stackoverflow.com/questions/23684296
复制相似问题