2010-07-25 5 views
0

J'ai une requête qui renvoie les étudiants et leurs colocataires. L'idée est de faire apparaître tout le monde dans la première colonne puis dans les colonnes 2 et 3 pour avoir chaque colocataire. La colonne 3 peut être vide, mais les colonnes 1 et 2 auront toujours des résultats.SQL Essayer de sélectionner uniquement le premier enregistrement parmi plusieurs renvoyés

Ma requête renvoie les données correctes à l'exception du moment où il y a 3 personnes dans la pièce, j'obtiendrai plus d'un enregistrement. tel que ci-dessous.

_roommate1 roommate2 roommate3 room1_ 
_roommate1 roommate3 roommate2 room1_ 
_roommate2 roommate1 roommate3 room1_ 
_roommate2 roommate3 roommate1 room1_ 
_roommate3 roommate1 roommate2 room1_ 
_roommate3 roommate2 roommate1 room1_ 

Tout ce que je veux faire est de garder la première instance de chaque ligne lorsque le champ est apparaît dans la colonne 1.

donc je voudrais réduire la production à:

_roommate1 roommate2 roommate3 room1_ 
_roommate2 roommate1 roommate3 room1_ 
_roommate3 roommate1 roommate2 room1_ 

L'intention est d'envoyer une lettre type à chaque personne dans la colonne 1 pour leur indiquer le nom de leurs colocataires.

Puisque je ne peux utiliser distinct sur une ligne et pas sur un champ, je suis à une perte temporaire comme comment je pourrais être en mesure de le faire. Ce que je voudrais être en mesure de dire est de savoir si cela a fonctionné:

SELECT (DISTINCT Column1), column2, column3 donc je n'aurais que la première instance de chaque colonne1. Aucune suggestion?

+0

Copie possible: http://stackoverflow.com/questions/251278/select-one-column-distinct-sql – Gian

+0

pouvez-vous inclure la requête que vous utilisez pour générer votre exemple de sortie? –

+0

Pourriez-vous nous donner une version allégée de vos tableaux, s'il vous plaît? –

Répondre

0

Essayez cette

SELECT Column1, MAX(Column2) AS Column2, MAX(Column3) AS Column3 
FROM MyTable 
GROUP BY Column1 
+0

Cela retournera une ligne sinle par élève, étant: '_roommate1 roommate3 roommate3 room1_' –

+0

Cela donnera une ligne par élève, mais ne résout pas le problème de montrer colocation2 et colocation3 comme des entrées séparées. –

+0

Désolé à ce sujet. Je suis évidemment confus. D'abord, pour voir si je peux corriger mon premier essai. Dans la clause SELECT, si la colonne 2 est modifiée en 'MIN (Column2) AS Column2', cela résout-il le problème? Si cela ne fonctionne pas, pouvez-vous nous dire si vous utilisez SQL Server, MySql, Oracle, autre? – bobs

-1

C'est une question folle. Vous faites quelque chose de mal. Pourquoi avez-vous besoin d'exécuter cette requête? Divisez ceci en plusieurs requêtes et regroupez les données dans votre programmation. Il semble que vous demandiez à la base de données de faire quelque chose d'inhabituel et d'inhabituel.

+2

Je suppose que cela signifie que vous n'avez pas de solution? –

+0

Vous n'avez pas posé de problème. Vous venez de dire que vous aviez une requête qui ne fonctionnait pas. Quel problème essayez-vous de résoudre en faisant cela? –

+0

Les bases de données sont des données de gestion beaucoup plus rapides que les langages de script, de sorte que le levage lourd (c'est-à-dire l'agrégation de données, le filtrage) devrait être géré par eux. – jnns

Questions connexes