使用 3 个表进行查询,但无法获得我想要的输出
Doing Query for with 3 tables and cant get the output how I want it
有 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 有项目。在table.
这是我尝试了一段时间后目前所处的位置
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
我不是在一行中获取类似的数据,而是将每个字符分成一堆行。例如 table headers 是
Stacks | ITEMID | charName
1 | 1 | Char1
1 | 1 | Char2
但我想要的是
Stacks | ITEMID | charName
2 | 1 | Char1,Char2
欢迎任何帮助谢谢:)。如果我的问题格式不符合标准,请发表评论,告诉我如何改进。
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]
输出
有 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 有项目。在table.
这是我尝试了一段时间后目前所处的位置
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
我不是在一行中获取类似的数据,而是将每个字符分成一堆行。例如 table headers 是
Stacks | ITEMID | charName
1 | 1 | Char1
1 | 1 | Char2
但我想要的是
Stacks | ITEMID | charName
2 | 1 | Char1,Char2
欢迎任何帮助谢谢:)。如果我的问题格式不符合标准,请发表评论,告诉我如何改进。
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]
输出