使用3个表执行查询并且无法获得我想要的输出

时间:2016-06-22 14:13:56

标签: sql sql-server ssms-2014

有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

欢迎任何帮助谢谢:)。如果我的问题格式不符合标准,请留下我可以改进的评论。

1 个答案:

答案 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]

<强>输出

enter image description here