簡體   English   中英

本年度與去年之間的SQL差異。 如果去年數據不包括當前年份

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM