Выберите 1 ряд из каждой категории фотографий - PullRequest
1 голос
/ 15 октября 2011

У меня есть 2 стола Памятники и фотографии

Памятник Стол

Monument_Id int

Памятник Имя nvarchar

Фотографии Таблицы

Photo_Id int

Monument_Id int

URL nvarchar

В некоторых памятниках содержится более 50 изображений, а некоторые пусты.Я просто хочу показать только 1 изображение каждого памятника и игнорировать памятник, у которого нет изображения.

старался изо всех сил, но не смог заставить его работать.

С уважением, спасибо

1 Ответ

2 голосов
/ 15 октября 2011

Вы не указываете , который из тех 50 изображений, которые вы хотите получить, - но что-то в этом роде будет работать: вы можете использовать CTE (Common Table Expression) с функцией ROW_NUMBER :

;WITH OneImagePerMonument AS
(
   SELECT 
       m.Monument_ID, m.MonumentName, p.Photo_Id, p.URL,
       ROW_NUMBER() OVER(PARTITION BY m.Monument_ID ORDER BY Photo_Id DESC) AS 'RowNum')
   FROM dbo.Monument m
   INNER JOIN dbo.Photos p ON m.Monument_Id = p.Monument_Id
)
SELECT 
   Monument_ID, MonumentName, Photo_Id, URL
FROM OneImagePerMonument
WHERE RowNum = 1

Этот CTE «разбивает» ваши данные на Monument_Id, и для каждого раздела функция ROW_NUMBER выдает последовательные числа, начиная с 1 и упорядочивая по Photo_Id DESC - так что последняя строка получает RowNum = 1 (для каждый UserID), который я выбираю из CTE в операторе SELECT после него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...