Sql server 2008 在sql server中一行中表示查询中的一个或多个数据?
我有一个包含两个表的数据库:Sql server 2008 在sql server中一行中表示查询中的一个或多个数据?,sql-server-2008,Sql Server 2008,我有一个包含两个表的数据库:用户,项目 用户如下所示: userId uniqueindentifier username nvarchar userId uniqueidentifier itemName nvarchar SELECT * FROM Users JOIN Items on Users.UserId = Items.UserId WHERE UserId = 1 UserId userName ItemName 1 Ol
用户
,项目
用户
如下所示:
userId uniqueindentifier
username nvarchar
userId uniqueidentifier
itemName nvarchar
SELECT * FROM Users JOIN Items on Users.UserId = Items.UserId
WHERE UserId = 1
UserId userName ItemName
1 Oliver Apple
1 Oliver Orange
UserId userName ItemNames
1 Oliver Apple, Orange
UserId userName ItemName1 ItemName2
1 Oliver Apple Orange
项目
如下所示:
userId uniqueindentifier
username nvarchar
userId uniqueidentifier
itemName nvarchar
SELECT * FROM Users JOIN Items on Users.UserId = Items.UserId
WHERE UserId = 1
UserId userName ItemName
1 Oliver Apple
1 Oliver Orange
UserId userName ItemNames
1 Oliver Apple, Orange
UserId userName ItemName1 ItemName2
1 Oliver Apple Orange
因此,每个用户可以有几个项目
我需要执行一个返回用户的查询。我可以这样做:
userId uniqueindentifier
username nvarchar
userId uniqueidentifier
itemName nvarchar
SELECT * FROM Users JOIN Items on Users.UserId = Items.UserId
WHERE UserId = 1
UserId userName ItemName
1 Oliver Apple
1 Oliver Orange
UserId userName ItemNames
1 Oliver Apple, Orange
UserId userName ItemName1 ItemName2
1 Oliver Apple Orange
如果用户1有2项,查询将返回如下内容:
userId uniqueindentifier
username nvarchar
userId uniqueidentifier
itemName nvarchar
SELECT * FROM Users JOIN Items on Users.UserId = Items.UserId
WHERE UserId = 1
UserId userName ItemName
1 Oliver Apple
1 Oliver Orange
UserId userName ItemNames
1 Oliver Apple, Orange
UserId userName ItemName1 ItemName2
1 Oliver Apple Orange
我希望查询返回如下内容:
userId uniqueindentifier
username nvarchar
userId uniqueidentifier
itemName nvarchar
SELECT * FROM Users JOIN Items on Users.UserId = Items.UserId
WHERE UserId = 1
UserId userName ItemName
1 Oliver Apple
1 Oliver Orange
UserId userName ItemNames
1 Oliver Apple, Orange
UserId userName ItemName1 ItemName2
1 Oliver Apple Orange
或者更好,像这样:
userId uniqueindentifier
username nvarchar
userId uniqueidentifier
itemName nvarchar
SELECT * FROM Users JOIN Items on Users.UserId = Items.UserId
WHERE UserId = 1
UserId userName ItemName
1 Oliver Apple
1 Oliver Orange
UserId userName ItemNames
1 Oliver Apple, Orange
UserId userName ItemName1 ItemName2
1 Oliver Apple Orange
有可能做到这一点吗?我想这样做的原因是,如果我用
选择前50名进行查询,我想返回50个不同的用户,而不是(例如)50行中的18个用户,每个用户有几个项目。如果存在已知的最大列数,可以使用透视和行数
来透视。或XML路径
来模拟分隔列表。这两个问题都包含在其他SO问题中
不过,你不需要这样做就能达到你最后一句话中所说的结果。你可以这么做
;WITH TopUsers As
(
SELECT TOP (50) *
FROM Users
ORDER BY UserId
)
SELECT *
FROM TopUsers
JOIN Items on TopUsers.UserId = Items.UserId
如果存在已知的最大列数,则可以使用PIVOT
和ROW\u NUMBER
来透视。或XML路径
来模拟分隔列表。这两个问题都包含在其他SO问题中
不过,你不需要这样做就能达到你最后一句话中所说的结果。你可以这么做
;WITH TopUsers As
(
SELECT TOP (50) *
FROM Users
ORDER BY UserId
)
SELECT *
FROM TopUsers
JOIN Items on TopUsers.UserId = Items.UserId