【问题标题】:How to see sales per item every week for last year in SQL如何在 SQL 中查看去年每周每件商品的销售额
【发布时间】:2014-09-23 20:47:34
【问题描述】:

我正在尝试编写一个查询,该查询将显示去年每周售出的单位数量。我从获取去年的数字开始,就像这样......

select i.[INV ITEM Ext ID],i.[INV ITEM Description], sum(d.[ar orderd qty]) as 'Total Units Sold'  
from [inv items] i  
join [ar order detail] d on (d.[ar orderd item id] = i.[INV ITEM Ext ID])  
join [ar order] o on (o.[AR ORDER Document #] = d.[AR ORDERD Document #])  
where o.[AR ORDER Document #] not like '%Ret%' and d.[ar orderd date] > '9/16/2013' and d.[AR ORDERD Qty] >= '0'  
group by i.[INV ITEM Ext ID], i.[INV ITEM Description]  
order by i.[INV ITEM Ext ID]  

这将退回去年已售出的所有商品。现在我需要显示这些物品是在那一周售出还是那一周没有售出。这是我尝试运行的代码,但是它不会返回上述查询中的所有项目,而只是返回已售出的项目。

select i.[INV ITEM Ext ID],i.[INV ITEM Description], sum(d.[ar orderd qty]) as 'Total Units Sold'  
from [inv items] i    
join [ar order detail] d on (d.[ar orderd item id] = i.[INV ITEM Ext ID])    
join [ar order] o on (o.[AR ORDER Document #] = d.[AR ORDERD Document #])    
where o.[AR ORDER Document #] not like '%Ret%' and d.[ar orderd date] between '9/16/2013' and '9/22/2013' and d.[AR ORDERD Qty] >= '0'    
group by i.[INV ITEM Ext ID], i.[INV ITEM Description]    
order by i.[INV ITEM Ext ID]  

有没有一种方法可以在 sum 语句中运行具有我的条件的查询?例如,输出为 (inv item ext id) (inv item description) (total Units sold 9/16-9/22) (Total units sold 9/23-9/29) (Total Units sold 9/30-10 /6)......我需要在所有查询中使用相同的产品,以便我可以将其粘贴到 Excel 中。

【问题讨论】:

  • 这是什么数据库?

标签: sql


【解决方案1】:

此类查询的通用名称是pivotcross-tab。条件聚合是一种通用的方法,尽管许多数据库支持其他方法:

select
    i.[INV ITEM Ext ID],
    i.[INV ITEM Description],
    sum(d.[ar orderd qty]) as 'Total Units Sold',
    sum(case when
            d.[ar orderd date] >= '2013-09-16' and
            d.[ar orderd date] < '2013-09-23'
        then d.[ar orderd qty]
        else 0 end) as 'total Units sold 9/16-9/22',
    sum(case when
            d.[ar orderd date] >= '2013-09-23' and
            d.[ar orderd date] < '2013-09-30'
        then d.[ar orderd qty]
        else 0 end) as 'total Units sold 9/23-9/29'
from
    [inv items] i
        inner join
    [ar order detail] d
        on d.[ar orderd item id] = i.[INV ITEM Ext ID]
        inner join
    [ar order] o
        on o.[AR ORDER Document #] = d.[AR ORDERD Document #]
where
    o.[AR ORDER Document #] not like '%Ret%' and
    d.[ar orderd date] > '9/16/2013' and
    d.[AR ORDERD Qty] >= '0'
group by
    i.[INV ITEM Ext ID],
    i.[INV ITEM Description]
order by
    i.[INV ITEM Ext ID];

如果您使用的是 MS Access,您可能需要将 case 语句更改为使用 IIF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多