[英]SQL Difference Between Current Year and Last Year. If Last Year Data Does Not Exist Include Current Year
在上一篇文章中,我獲得了尋找增量銷售的幫助。 查詢效果很好。 我按產品添加了分組討論。 我遇到的問題是我需要展示正在銷售的新產品。 如果該產品去年不存在,但我們今年將銷售; 那么它應該顯示在數據表中。
我嘗試在WHERE中使用CASE語句,但它導致大量數據重復。 我在想類似下面的內容。 我如何處理僅包括當年的項目? 謝謝您的幫助,不勝感激。
在子句中不起作用
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
您的查詢隱式使用了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
否則,對於僅存在於本年度。
您發布的查詢在CTE中不包含“ Project
字段,因此我無法確切說明其工作原理,但是發布的數據應該可以幫助您入門。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.