我是SQL的初学者,希望有人可以帮助我:
我有一个项目类别表:
ItemID | ItemName | ItemCategory | Active/Inactive
100 Carrot Veg Yes
101 Apple Fruit Yes
102 Beef Meat No
103 Pineapple Fruit Yes
我有一张销售表:
Date | ItemID | Sales
01/01/2010 100 50
05/01/2010 101 200
06/01/2010 101 250
06/01/2010 102 300
07/01/2010 103 50
08/01/2010 100 100
10/01/2010 102 250
如何按项目按期间(如下所示)(仅包含活动项目)
来实现销售汇总表ItemID | ItemName | ItemCategory | (01/01/2010 – 07/01/2010) | (08/01/2010 – 14/01/1020)
100 Carrot Veg 50 100
101 Apple Fruit 450 0
103 Pineapple Fruit 0 0
答案 0 :(得分:0)
一个非常脏的解决方案
SELECT s.ItemId,
(SELECT ItemName FROM Items WHERE ItemId = s.ItemId) ItemName,
ISNULL((SELECT Sum(Sales)FROM sales
WHERE [Date] BETWEEN '2010/01/01' AND '2010/01/07'
AND itemid = s.itemid
GROUP BY ItemId),0) as firstdaterange,
ISNULL((SELECT Sum(Sales)FROM sales
WHERE [Date] BETWEEN '2010/01/08' AND '2010/01/14'
AND itemid = s.itemid
GROUP BY ItemId), 0) seconddaterange
FROM Sales s
INNER JOIN Items i ON s.ItemId = i.ItemId
WHERE i.IsActive = 'Yes'
GROUP BY s.ItemId
同样是一个肮脏的解决方案,日期也是硬编码的。您可以将此转换为存储过程,将日期作为参数。
我对PIVOT命令并不太了解,但也许这值得谷歌。
答案 1 :(得分:0)
您可以使用SQL PIVOT运算符来旋转数据。不幸的是,由于需要预先指定输出列,该运算符的范围有限。
通常,您可以通过对计算列进行分组来实现此目的(在这种情况下,计算列的周数或每行的第一天)。然后,您可以使用SELECT DISTINCT week FROM result
派生的列动态生成SQL,或者只是将结果放入Excel并使用其数据透视表工具。