2016-10-06 1 views
0

У меня есть база данных о спорте (крикет, бит, как бейсбол от моих американских друзей), мой запрос, чтобы получить большинство калиток (аут в бейсболе) в данном сезоне, выглядит следующим образом:Последовательное использование значений из столбца в разделе где

select top(5) 
S.Season, 
TT.Team, 
P.LastCommaSpaceFirst, 
SUM(PIS.Wickets) AS 'Wickets' 
from PlayerInningsSummary PIS 
join Personel P on P.PersonID = PIS.PlayerID 
join InningsSummary INS on PIS.InningsSummaryID = INS.InningsSummaryID 
join Matches M on INS.MatchID = M.MatchID 
join Seasons S on M.SeasonID = S.SeasonID 
join Teams TT on M.TeamID = TT.TeamID 
where TT.Team = '1st XI' --and S.Season = '1973/1974' 
group by S.Season, TT.Team, P.LastCommaSpaceFirst 
order by Wickets desc 

Таким образом, этот запрос попадает в пятерку лучших людей, которые принимали большинство калиток за сезон (1973/1974 в этом случае).

Запрос работает отлично, но я хочу повторить все сезоны, которые у меня есть (например: 1974/1975, 1975/1975 и т. Д.).

Как это сделать? Я думаю, что ROW_OVER с PARTITION BY - это путь, но я не могу понять, как это сделать.

Цените любую помощь.

+0

Я думаю, если вы включите выборочные данные и желаемый результат, будет легче ответить на ваш вопрос. –

+0

Кажется, что CTE может быть альтернативой, но я тоже не знаком с этим. – Yabbie

+0

Я не могу получить форматирование для работы :( @TimBiegeleisen 'Сезон | Команда | Имя | Wickets ------------------------- ---------------- 1973/1974 | 1-й XI | SMITH, John | 38 1973/1974 | 1-й XI | SMITH, Bill | 32 1973/1974 | 1st XI | SMITH, Phil | 27 1973/1974 | 1-й XI | SMITH, Craig | 26 1973/1974 | 1-й XI | SMITH, Ben | 21 ' – Yabbie

ответ

1

Что-то вроде этого

Select * from 
(
select Row_number() over(Partition by S.Season Order by SUM(PIS.Wickets) desc) as RN 
S.Season, 
TT.Team, 
P.LastCommaSpaceFirst, 
SUM(PIS.Wickets) AS 'Wickets' 
from PlayerInningsSummary PIS 
join Personel P on P.PersonID = PIS.PlayerID 
join InningsSummary INS on PIS.InningsSummaryID = INS.InningsSummaryID 
join Matches M on INS.MatchID = M.MatchID 
join Seasons S on M.SeasonID = S.SeasonID 
join Teams TT on M.TeamID = TT.TeamID 
where TT.Team = '1st XI' --and S.Season = '1973/1974' 
group by S.Season, TT.Team, P.LastCommaSpaceFirst 
) A 
Where RN <= 5 
+0

Sweet Mary and Joseph - Это ТОЧНО, что я был после !!! Большое спасибо @ Prdp – Yabbie

+0

Я все уши! Если бы вы могли объяснить, почему вы выбрали один из них, я бы тоже это оценил. – Yabbie

+0

@Yabbie - извините за этот подход Мне нужны образцы данных из всех таблиц, вложенных в этот запрос и ожидаемый результат. Так что игнорируйте его –