У меня есть таблица для каждого типа местоположения (город, улица, страна и т. Д.).
Теперь у меня есть хранимая процедура, которая должна возвращать список «Местоположений» с их «Наивысшим рейтингом проверки».".
У меня есть временная таблица для" Местоположений "(может быть что угодно - Улица, Город и т. Д.).
Я вставляю в временную таблицу сначала из городов, затем из улиц, затем Страны и т. д.
В итоге я получаю временную таблицу «Местоположения», и для каждого из них мне нужно получить обзор с наивысшим рейтингом.(наивысший = BaseScore, например, 5,0)
Количество элементов:
- Местоположение Многие..Много Сообщений (таблица присоединений PostLocations)
- Сообщение 1..1 Обзор
- Обзор 1..1 Оценка
Таблица временных местоположений:
DECLARE @ResultSet TABLE
(
[LocationId] INT,
[TopReviewId] INT, -- starts out NULL, need to fill in
[TopReviewContent] NVARCHAR(MAX) -- starts out NULL, need to fill in
)
-- Get the Top Rated Review for each location.
UPDATE ResultSet
SET TopReviewId = TopReview.PostId,
TopReviewContent = TopReview.Content
FROM @ResultSet ResultSet
INNER JOIN
(
SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON p.PostId = r.PostId
INNER JOIN Scores s
ON r.ScoreId = s.ScoreId
INNER JOIN @ResultSet rs
ON pl.LocationId = rs.LocationId
ORDER BY s.BaseScore DESC
) AS TopReview
ON ResultSet.LocationId = TopReview.LocationId
INNER JOIN PostLocations pl
ON ResultSet.LocationId = pl.LocationId
INNER JOIN Posts p
ON pl.PostId = p.PostId
INNER JOIN Reviews r
ON pl.PostId = r.PostId
-- Now return the Results:
SELECT TOP 10
[LocationId],
[TopReviewId],
[TopReviewContent]
FROM @ResultSet
Это вывод В настоящее время я получаю
LocationId TopReviewId TopReviewContent
1 12313 Blah Blah
2 NULL NULL
3 NULL NULL
Это вывод Я хочу
LocationId TopReviewId TopReviewContent
1 12313 Blah Blah
2 44323 Meh meh
3 5345345 Pew pew