첫 번째 CTE의 모든 행과 두 번째 CTE의 4 개의 행을 선택하는 여러 CTE가 포함 된 쿼리를 작성합니다. 파트를 선택했지만 CTE2에서 전체 항목을 반환합니다. 여러 CTE에서 두 번째 CTE에서 상위 n 개의 행을 선택하는 방법
;WITH CTE1(UserName, ItemId, ItemName, ImageId, ImageName) AS ( SELECT [Users].UserName, [Items].ItemId, [Items].Name, [Images].ImageId, [Images].Name FROM Items INNER JOIN Images ON [Items].ItemId = [Images].ItemId INNER JOIN Users ON [Items].UserId = TestUser.UserId WHERE ([Items].ItemId = 1) AND ([Items].UserId = 1) AND ([Items].Name = N'Pen') ), CTE2(ItemId, ItemName, ImageId, ImageName) AS ( SELECT [Items].ItemId, [Items].Name, [Images].ImageId, [Images].Name FROM Items INNER JOIN [Images] ON [Items].ItemId = [Images].ItemId WHERE [Items].UserId = 1 GROUP BY [Items].ItemId, [Items].Name, [Images].ImageId, [Images].Name ) SELECT CTE1.UserName, CTE1.ItemId AS ItemId1, CTE1.ItemName AS ItemName1, CTE1.ImageId AS ImageId1, CTE1.ImageName AS ImageName1, COUNT(CTE1.ItemId) OVER() AS ItemCounter1, CTE2.ItemId AS ItemId2, CTE2.ItemName AS ItemName2, CTE2.ImageId AS ImageId2, CTE2.ImageName AS ImageName2, COUNT(CTE2.ItemId) OVER() AS TotalCount FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY ItemId ORDER BY ItemId) AS RN FROM CTE2) CTE2 LEFT JOIN CTE1 ON CTE2.ItemId = CTE1.ItemId WHERE RN = 1 ORDER BY CTE1ItemId DESC모든 이해 될 수 있습니다 :
this is what it returns and selected part that i want.
이
내 쿼리입니다.
무엇을 기준으로 4 행을 선택합니까? –
도와 줘서 고마워, 친구. 이제 나는 내 잘못이 어디에 있는지 알았다. – Masoud