Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在sql server中一行中表示查询中的一个或多个数据?_Sql Server 2008 - Fatal编程技术网

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