2014-09-23 89 views
0

我正在尝试编写一个查询,告诉我每周在过去一年中销售的产品数量。我开始得到去年的数字,像这样...如何在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)......我需要在所有querys上都有相同的产品,所以我可以将它粘贴到excel中。

+0

这是什么数据库? – Laurence 2014-09-23 21:33:21

回答

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

相关问题