2011-09-02 6 views
1
Users Users, Users, Items

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 
관련 문제