购买项目
问题描述:
非规范化的数据我有如下表:购买项目
BoughtItems
UserID ItemID StoreID Quantity Price
1 1 1 1 1
1 4 1 2 3
1 5 2 1 3
假设,这将是为BoughtItems
表中的每个用户再没有其他五个项目。
我想有一些STOREID所有的客户,并已购买的,在这种格式...为STOREID = 1的所有项目的结果将是:
UserID Item1ID Item2ID Item3ID Item4ID Item5ID
1 1 4 [empty] [empty] [empty]
答
DECLARE @StoreID INT;
SET @StoreID = 1;
;WITH x AS
(
SELECT UserID, ItemID,
rn = ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY ItemID)
FROM dbo.BoughtItems
WHERE StoreID = @StoreID
)
SELECT UserID,
Item1ID = MAX(CASE WHEN rn = 1 THEN ItemID END),
Item2ID = MAX(CASE WHEN rn = 2 THEN ItemID END),
Item3ID = MAX(CASE WHEN rn = 3 THEN ItemID END),
Item4ID = MAX(CASE WHEN rn = 4 THEN ItemID END),
Item5ID = MAX(CASE WHEN rn = 5 THEN ItemID END)
FROM x WHERE rn <= 5
GROUP BY UserID;
是怎样的商店表有关? – 2012-07-19 19:12:13
另外,如果有人只买了三件物品,你想在结果中做什么?您可以显示样本数据,期望的结果,以及这些结果是否仅从查询中返回,或者您是否真的需要以这种方式冗余地将此数据存储在另一个表中(并解释原因),而不是单词问题? – 2012-07-19 19:13:49
我想为某个“StoreID”指定的结果表。 BoughtItems中的StoreID字段存储表有关系 – seeker 2012-07-19 19:15:22