2009-11-26 11 views
0

Je cherche à combiner les requêtes suivantes en un seul, oùCompliqué MS Access Greatest-N-Per-Groupe problème

  • scouting.jumpGate est un entier,
  • scouting.astroLoc est une chaîne,
  • scouting.ownerguild est une chaîne et
  • scouting.galaxy est un entier

qui réticule à une autre table (et est mon groupe):

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; 

et

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; 

et

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; 

a continué jusqu'à

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; 

Le code que j'ai généré après avoir lu sur le site Web de Microsoft pour ce grand N par problème Groupe comme suit:

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 

Fondamentalement, c'est très proche de ce que je voudrais. Tout semble fonctionner. Cependant, certains GROUPES ne sont pas représentés dans la sortie même après avoir regardé les données, chaque groupe a un enregistrement qui satisfait les contraintes de la requête. Incidemment, si je supprime la contrainte scouting.ownerGuild = 'SWARM', cela fonctionne parfaitement (mais j'ai besoin de cette contrainte).

+0

merci pour le montage - je me suis essayé mais je ne savais pas comment sortir comme layout ce. – jtromans

Répondre

0

Que diriez-vous:

Select scouting.astroLoc, 
     scouting.galaxy, 
     scouting.jumpGate, 
     scouting.ownerGuild 
From galaxy Inner Join 
     scouting On galaxy.[galaxy_ID] = scouting.galaxy 
WHERE (scouting.ID) In (
      Select Top 3 scouting.ID 
      From scouting 
      Where scouting.galaxy = galaxy.[galaxy_ID] 
      And scouting.ownerGuild = 'SWARM' 
      Order By scouting.jumpGate Desc) 
Order By scouting.astroLoc Desc, 
       scouting.jumpGate Desc 

Sinon, il semble probable que le top 3 peut inclure des

where scouting.ownerGuild <> 'SWARM' 
+0

Je pense que j'aurais pu essayer cette position de contrainte ici aussi. Je vous ferai savoir comment je m'entends. Merci! – jtromans

+0

En exécutant la contrainte ownerGuild ici à cette position dans la requête, elle renvoie toujours des valeurs où scouting.ownerGuild = n'importe quoi, et pas seulement SWARM. – jtromans

+0

scouting.jumpGate est-il un champ unique? – Fionnuala