如何在SQL中查看去年每个项目的销售额

时间:2014-09-23 20:47:35

标签: sql

我正在尝试编写一个查询,告诉我去年每周销售的单位数量。我开始是这样得到去年的数字......

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)(销售总单位数9 / 16-9 / 22)(销售总单位数9 / 23-9 / 29)(销售总单位数9 / 30-10) / 6)......我需要在所有查询中使用相同的产品,以便将其粘贴到Excel中。

1 个答案:

答案 0 :(得分:0)

此类查询的通用名称为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