首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >本年度与去年的SQL差异。如果去年数据不存在,则包含本年度

本年度与去年的SQL差异。如果去年数据不存在,则包含本年度
EN

Stack Overflow用户
提问于 2014-05-16 00:49:22
回答 1查看 1.8K关注 0票数 0

在上一篇文章中,我得到了寻找增量销售的帮助。这个查询运行得很好。我按产品添加了分组。我遇到的问题是我需要展示正在销售的新产品。如果该产品去年不存在,但我们今年正在销售它;那么它应该显示在数据表中。

我尝试在WHERE中使用CASE语句,但它导致了大量重复数据。我的想法类似于下面的内容。如何包含仅存在于本年度的项目?谢谢你的帮助,非常感谢。

不工作Where子句

代码语言:javascript
代码运行次数:0
运行
复制
      WHERE
        Ym.Project = 
        CASE
            WHEN ymprev.Project IS NULL THEN ym.Project
        ELSE ymprev.Project
        END

下面是工作查询。

代码语言:javascript
代码运行次数:0
运行
复制
        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
EN

回答 1

Stack Overflow用户

发布于 2014-06-24 03:25:01

您的查询是隐式使用INNER JOIN的-这意味着您只能看到在两个数据集中有匹配的值,正如您所描述的那样。

尝试将FROM子句更改为

代码语言:javascript
代码运行次数:0
运行
复制
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的数据应该可以帮助您开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23684296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档