2014-09-23 95 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

相關問題