0

次の表があります。

BoughtItems 

UserID  ItemID  StoreID  Quantity  Price
1       1       1        1         1
1       4       1        2         3
1       5       2        1         3

BoughtItemsテーブル内の各ユーザーの項目が 5 つを超えないと仮定しましょう。

いくつかの StoreID からのすべてのクライアントと、購入されたすべてのアイテムをこの形式で取得したい... StoreID = 1 の場合、結果は次のようになります。

UserID  Item1ID  Item2ID  Item3ID  Item4ID  Item5ID
1       1        4        [empty]  [empty]  [empty]
4

1 に答える 1

2
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-19T19:27:44.690 に答える