Я хочу объединить следующие запросы в один, где
- scouting.jumpGate является целым числом,
- scouting.astroLoc - строка,
- scouting.ownerguild - это строка, а
- scouting.galaxy - это целое число
, который ссылается на другую таблицу (и это моя ГРУППА):
Select TOP 3
scouting.jumpGate,
scouting.astroLoc,
scouting.ownerGuild,
scouting.Galaxy
FROM scouting
WHERE scouting.Galaxy = 1
AND scouting.ownerGuild = 'TEST'
ORDER BY scouting.jumpGate DESC,
scouting.astroloc DESC;
и
SELECT TOP 3
scouting.jumpGate,
scouting.astroLoc,
scouting.ownerGuild,
scouting.Galaxy
FROM scouting
WHERE scouting.Galaxy = 2
AND scouting.ownerGuild = 'TEST'
ORDER BY scouting.jumpGate DESC,
scouting.astroloc DESC;
и
SELECT TOP 3
scouting.jumpGate,
scouting.astroLoc,
scouting.ownerGuild,
scouting.Galaxy
FROM scouting
WHERE scouting.Galaxy = 3
AND scouting.ownerGuild = 'TEST'
ORDER BY scouting.jumpGate DESC,
scouting.astroloc DESC;
продолжалось до
SELECT TOP 3
scouting.jumpGate,
scouting.astroLoc,
scouting.ownerGuild,
scouting.Galaxy
FROM scouting
WHERE scouting.Galaxy = 79
AND scouting.ownerGuild = 'TEST'
ORDER BY scouting.jumpGate DESC,
scouting.astroloc DESC;
Код, сгенерированный мною после прочтения на веб-сайте Microsoft этой проблемы Greatest N Per Group, выглядит следующим образом:
Select scouting.astroLoc,
scouting.galaxy,
scouting.jumpGate,
scouting.ownerGuild
From galaxy Inner Join
scouting On galaxy.[galaxy_ID] = scouting.galaxy
Where scouting.ownerGuild = 'SWARM'
AND (scouting.jumpGate) In (Select Top 3 scouting.jumpGate From scouting Where scouting.galaxy = galaxy.[galaxy_ID] Order By scouting.jumpGate Desc)
Order By scouting.astroLoc Desc,
scouting.jumpGate Desc
По сути, это очень близко к тому, что я хотел бы. Кажется, все работает. Тем не менее, некоторые из ГРУПП не представлены в выходных данных, даже если посмотреть на данные, каждая группа имеет запись, которая удовлетворяет ограничениям запроса. Кстати, если я уберу ограничение scouting.ownerGuild = 'SWARM', оно будет отлично работать (но мне нужно это ограничение).