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 回答