0

3つのテーブルがあります

  • アイテム

    itemID PK
    
  • 在庫

    quantity
    charID FK
    itemID FK
    
  • キャラクター

    charID PK
    charName
    

.

ITEM 1---many INVENTORY 8----1 CHARACTER

キャラクターの在庫に積み上げられている上位 10 個のアイテムと、このアイテムを在庫に積み上げているユーザーを見つけたいと考えています。したがって、最終的には、itemID 1 に 4 つのスタックがあり、これらの charID にアイテムがあり、itemID 2 に 3 つのスタックがあり、これらの charID にアイテムがあるようなものになります。テーブルで。

これは、しばらくこれをやろうとした後、私が現在いるところです

SELECT COUNT(INVENTORY.itemID) as Stacks, ITEM.itemID, CHARACTERS.charName
FROM INVENTORY
INNER JOIN ITEM
        ON INVENTORY.itemID = ITEM.itemID
INNER JOIN CHARACTERS
        ON INVENTORY.charID = CHARACTERS.charID
WHERE INVENTORY.quantity>1
GROUP BY ITEM.itemID, CHARACTERS.charName
ORDER BY  Stacks DESC
GO

私は、単一の行でデータのようなものを取得する代わりに、文字ごとに一連の行に分割しています。たとえば、テーブル ヘッダーは次のとおりです。

Stacks | ITEMID | charName    
1      | 1      | Char1    
1      | 1      | Char2

しかし、私が欲しいのは

Stacks | ITEMID | charName    
2      | 1      | Char1,Char2

どんな助けでも大歓迎ですありがとう:)。質問の形式が標準に達していない場合は、改善方法についてコメントを残してください。

4

1 に答える 1

0

SQLデモ

SELECT [ITEMID], 
       LEFT(column_names , LEN(column_names )-1) AS column_names, 
       SUM([Stacks]) total_stacks  -- or COUNT() not sure which you need
FROM Table1 AS extern
CROSS APPLY
(
    SELECT [charName] + ','
    FROM Table1 intern
    WHERE intern.[ITEMID] = extern.[ITEMID]
    FOR XML PATH('')
) pre_trimmed (column_names)
GROUP BY [ITEMID], column_names;

注: ケースを拡張するので、別の [itemID] を含めます

出力

ここに画像の説明を入力

于 2016-06-22T15:21:52.587 に答える