2011-05-10 7 views
0

Je cherche un moyen de retourner des données dans un ordre très spécifique à partir d'une base de données Access en utilisant SQL. Je veux regarder la fréquence la plus basse, liste tous les systèmes dans l'ordre de fréquence commençant par le système de la plus basse fréquence, puis fais la même opération sur la fréquence la plus haute suivante et ainsi de suite.Tri SQL des données groupées

Voici comment je voudrais que la sortie soit. (Les sauts de ligne sont juste pour la facilité de voir l'ordre de tri, je vais ajouter ceux du code de programme plus tard.)

System Freq 
------ ------ 
FM  100 
FM  120 
FM  150 

AM  110 
AM  150 
AM  170 

CW  160 
CW  180 
CW  200 

Est-ce quelque chose comme ceci possible avec SQL? Toute aide serait grandement appréciée. Je vous remercie.

+2

Quelle est la source? Est-ce l'exemple que vous avez fourni la sortie finale ou est-ce la source? – YetAnotherUser

+0

Freq est calculé à partir d'une fonction d'agrégat telle que «SUM» ou «AVG» n'est-ce pas? –

+0

Voici comment je voudrais que le tri fonctionne. Je ne l'ai pas montré dans cet exemple mais un ORDER BY normal ne fonctionne pas parce que la colonne System n'est pas dans l'ordre alphabétique, mais je veux que les noms System restent ensemble et que le groupe soit trié par fréquence. – Dan

Répondre

3

Est-ce ce que vous voulez?

Select System, Freq 
from YourTableName 
Order By System, Freq 

Ou si je relire votre question correctement c'est probablement ce que vous voulez (mes excuses pour un très arrière de code envelop)

Select YT1.[System], YT1.[Freq] 
From YourTable YT1 
     Inner Join (
      Select [System], Min(Freq) MinFreq 
      From YourTable YT2 
      Group By [System] 
     ) YT3 on YT1.[System] = YT3.[System] 
Order By YT3.[MinFreq], YT1.[System], YT1.Freq 
+0

On dirait que ça va faire ce que j'essaye de faire. Cependant quand j'essaye cela sur ma base de données j'obtiens l'erreur YT1. [System] n'a aucune valeur par défaut. Est-ce que je manque quelque chose? – Dan

+1

@Dan Si vous pouvez publier votre structure [YourTable], il serait plus simple d'y répondre. Est-ce que YT1. [System] a des valeurs nulles ou utilisez-vous cette sous-requête pour l'insérer dans une autre table? – YetAnotherUser

+0

Il s'avère que j'aurais dû référencer l'index au lieu d'une autre colonne jointe. Cela fonctionne très bien maintenant. Je vous remercie! – Dan

-1

Sans une image plus claire de vos données source, cela ressemble à c'est juste une simple commande sur plusieurs colonnes par:

SELECT [System], [Freq] 
FROM [TableName] 
ORDER BY [Freq], [System] 
+0

Et le vote baissier était parce que ...? – Tom

0

réponse générale est oui, donner un alias pour votre colonne calculée Freq et de l'ordre par le système et Freq: Voir un exemple fo r tri des lignes multiples here.

Questions connexes