有3个表
ITEM
itemID PK
INVENTORY
quantity
charID FK
itemID FK
CHARACTERS
charID PK
charName
ITEM 1---many INVENTORY 8----1 CHARACTER
我想找到堆叠在角色库存中的前十大堆叠物品以及谁将此物品堆放在其库存中。所以最后它会像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
欢迎任何帮助谢谢:)。如果我的问题格式不符合标准,请留下我可以改进的评论。
答案 0 :(得分:0)
<强> Sql Demo 强>
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]
<强>输出强>