在sql server中的一行中的一个查询中表示一个多数据?

时间:2011-09-02 10:13:18

标签: sql-server-2008

我有一个包含两个表的数据库:UsersItems

Users看起来像这样:

userId     uniqueindentifier
username   nvarchar

Items看起来像这样:

userId     uniqueidentifier
itemName   nvarchar

因此每个用户都可以拥有多个项目。

我需要做一个返回用户的查询。我可以这样做:

SELECT * FROM Users JOIN Items on Users.UserId = Items.UserId
WHERE UserId = 1

如果用户1有2个项目,查询将返回如下内容:

UserId    userName    ItemName
1         Oliver      Apple
1         Oliver      Orange

我希望查询返回如下内容:

UserId    userName    ItemNames
1         Oliver      Apple, Orange

甚至更好,像这样:

UserId    userName    ItemName1    ItemName2
1         Oliver      Apple        Orange

有可能实现这一目标吗?我想这样做的原因是因为如果我使用SELECT TOP 50进行查询,我想要返回50个不同的用户,而不是(例如)50行中的18个用户,每个用户有几个项目。

1 个答案:

答案 0 :(得分:1)

如果已知最大列数,您可以使用PIVOTROW_NUMBER进行转动。或XML PATH模拟GROUP_CONCAT分隔列表。这些都包含在其他SO问题中。

您无需执行此操作即可达到上一句中所述的结果。你可以做到

;WITH TopUsers As
(
SELECT TOP (50) *
FROM Users
ORDER BY UserId
)

SELECT * 
FROM TopUsers 
    JOIN Items on TopUsers.UserId = Items.UserId