当前位置: 首页 > 面试题库 >

SQL Server:计算每月总销售额,包括空余月份

井礼骞
2023-03-14
问题内容

我正在尝试计算一个月内某个产品的总销售额,但是我希望它包括所有“空”月(无销售),并且只选择最近的12个月。

到目前为止,这是我的代码。

declare
@ProductNo int

set @ProductNo = 1234

SELECT 
YEAR(o.OrderDate) as 'Year', MONTH(o.OrderDate) as 'Month', sum(Amount) as 'Units sold',[ProductNo]

  FROM [OrderLine] ol
  inner join [Order] o on ol.OrderNo = o.OrderNo
  where ProductNo = @ProductNo

  Group by ProductNo, YEAR(o.OrderDate), Month(o.OrderDate)
  Order by ProductNo, YEAR(o.OrderDate), Month(o.OrderDate)

返回

Year    Month   Units sold
2011    6       2
2011    10      1
2011    11      1
2012    2       1

但我希望它能回来。

Year    Month   Units sold
2011    4       0
2011    5       0
2011    6       2
2011    7       0
2011    8       0    
2011    9       0
2011    10      1
2011    11      1
2011    12      0
2012    1       0
2012    2       2
2012    3       0

我正在使用SQL Server 2008 R2 Sp1


问题答案:

在知道您有日历表之前,我已经做完了。我已经习惯master.dbo.spt_values了连续十二个月(包括当前)。

    declare @ProductNo int

    set @ProductNo = 1234

select MONTH(d.date), YEAR(d.date), isnull(t.amnt, 0) as [Units sold] from (
    SELECT
        YEAR(o.OrderDate) as 'Year', 
        MONTH(o.OrderDate) as 'Month', 
        sum(Amount) as amnt,
        [ProductNo]
    FROM [OrderLine] ol
    inner join [Order] o on ol.OrderNo = o.OrderNo
    where ProductNo = @ProductNo
    group by ProductNo, YEAR(o.OrderDate), Month(o.OrderDate)
) t
right join (
    select dateadd(mm, -number, getdate()) as date
    from master.dbo.spt_values 
    where type = 'p' and number < 12
) d  on year(d.date) = t.[year] and month(d.date) = t.[month]
order by YEAR(d.date), MONTH(d.date)


 类似资料:
  • 问题内容: 该查询仅显示现有月份的结果。我需要所有12个月的销售。 输出 : 所需输出 : 问题答案: 感谢@pankaj提示,在这里我通过此查询解决了…

  • 问题内容: 问候大家。我有一个SQL 2008 Express数据库,名称为tbl_Merchant,如下所示: 我需要找到在过去12个月内每月销售量排名前10位的商家。 如果只有一个月,这是非常容易的。 但是,如果我想在12个月内找到它们,我就会陷入困境。我需要显示120个商人,这是每个月的前10名销售商人。目前,我的解决方案是将第1个月到第12个月的12个表合并在一起,但是我认为这不是一个好方

  • 问题内容: 在我的数据库中,我有一个包含两列的表。第一列包含日期,第二列是计数变量。我想知道是否有可能根据日期和计数来计算每个工作日的平均计数。在下面的一个小例子中: 桌子: 输出: 问题答案: 您可以对表达式进行一系列调用以提取当天的名称: 编辑: 鉴于编辑后的帖子中已更新了预期的输出,因此操作起来容易得多-只需按:分组即可:

  • 问题内容: 我正在尝试计算表中的记录,并按日期将它们分组。我当前的查询如下所示: 这行得通,除了我还要数月不存在任何记录的计数。 谁能提供有关如何实现此目标的建议/建议? 问题答案: 在MySQL中执行此操作的最简单方法是创建一个名为的表,该表列出了您感兴趣的所有月份,并在表中使用LEFT JOIN。 但是,由于这主要是一个表示问题,因此通常很容易在您已经在运行的情况下运行查询并在客户端(例如PH

  • 我有一张这样的表 我想选择每月所有交易的总和。结果应该看起来像。。。 这就是我到目前为止得到的 但是,此分组按月份忽略年份(返回的月份值是单个整数)。我需要按每个月分组(返回2020年1月vs 2021年1月的不同行)

  • 问题内容: 我正在尝试为dellstore2数据库累计计算用户数。在这里和其他论坛上寻找答案时,我使用了这个 这返回 每个月是 看一下前几项,似乎总的来说还不错。但是当我跑步时 对于整个事情,我明白了 这与第一个输出11,681中的最后一项不一致。我猜上面的计算无法确定整个月的唯一性。什么是最快的计算方式(最好不使用自联接)? 问题答案: 除了直接从订单中选择之外,还可以使用如下子查询: 我认为这