По чистой догадке, я думаю вы хотите UNION ALL
:
SELECT *
FROM (
SELECT TOP 3,
'Home' AS Team,
P.Player_Name AS Batsman,
PS.Bat_Runs As Runs
FROM PlayerScores PS
JOIN Players P ON PS.PlayerId = P.PlayerId
JOIN Teams T ON P.TeamId = T.TeamId
JOIN Matches M ON PS.MatchId = M.MatchId
WHERE T.TeamId = 1
AND M.MatchId = 1025
GROUP BY P.Player_Name,
PS.Bat_Runs
ORDER BY Bat_Runs DESC --As the GROUP BY is on Bat_Runs, MAX isn't needed
--In truth,why is there even a GROUP BY with no aggregation?
) AS Home
UNION ALL
SELECT *
FROM (
SELECT Top 3
'Away' AS Team,
P.Player_Name AS Batsman,
PS.Bat_Runs As Runs
FROM PlayerScores PS
JOIN Players P ON PS.PlayerId = P.PlayerId
JOIN Teams T ON P.TeamId = T.TeamId
JOIN Matches M ON PS.MatchId = M.MatchId
WHERE T.TeamId = 3
AND Matches.MatchId = 1025
GROUP BY P.Player_Name,
PS.Bat_Runs
ORDER BY Bat_Runs DESC
) AS Away;
Редактировать: Теперь у нас есть ожидаемый набор результатов.Я подозреваю, что GROUP BY
здесь не нужен.Зачем?Ну, у ОП нет агрегации, поэтому нет смысла его там присутствовать, поэтому я удалил его.
Они утверждают, что у них нет отношений, но есть такая,отношения, которые они хотят, находятся в рейтинге трасс для обеих команд.Таким образом, это дает запрос типа:
WITH Home AS(
SELECT P.Player_Name AS Batsman,
PS.Bat_Runs As Runs,
RANK() OVER (ORDER BY PS.Bat_Runs) AS RunsRank
FROM PlayerScores PS
JOIN Players P ON PS.PlayerId = P.PlayerId
JOIN Teams T ON P.TeamId = T.TeamId
JOIN Matches M ON PS.MatchId = M.MatchId
WHERE T.TeamId = 1
AND M.MatchId = 1025),
Away AS (
SELECT P.Player_Name AS Batsman,
PS.Bat_Runs As Runs,
RANK() OVER (ORDER BY PS.Bat_Runs) AS RunsRank
FROM PlayerScores PS
JOIN Players P ON PS.PlayerId = P.PlayerId
JOIN Teams T ON P.TeamId = T.TeamId
JOIN Matches M ON PS.MatchId = M.MatchId
WHERE T.TeamId = 3
AND Matches.MatchId = 1025
)
SELECT H.Batsman AS HomeBatsMan,
H.Runs AS HomeBatsManRuns,
A.Batsman AS AwayBatsMan,
A.Runs AS AwayBatsManRuns
FROM Home H
JOIN Away A ON H.RunsRank = A.RunsRank
WHERE H.RunsRank <= 3;