2011-09-02 32 views
1

我有兩個表的數據庫:UsersItems在sql server中用一行表示查詢中的一對多數據?

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個不同的用戶,而不是(例如)18個用戶在50行,每用戶的幾個項目。

回答

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 
相關問題