我有一个包含两个表的数据库:Users
,Items
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个用户,每个用户有几个项目。
答案 0 :(得分:1)
如果已知最大列数,您可以使用PIVOT
和ROW_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