2009-03-05 5 views
0

je une seule table et il contient 4 colonnes:Obtenir les données sur un-plusieurs navires de même table

 
Id|Hospital| Doctor|patient 
1  A  D1  P11 
2  B  D6  P61 
3  A  D2  P21 
4  A  D1  P12 
5  B  D7  P71 
6  B  D6  P62 
7  B  D6  P63

Les médecins sont uniques à l'hôpital. Ils ne travaillent pas dans d'autres hôpitaux. Les patients sont uniques au médecin. Ils ne visitent aucun autre médecin. Chaque hôpital a plusieurs médecins.

Si vous observez, il y a plusieurs patients pour chaque médecin. Maintenant, la question est, comment puis-je obtenir "un seul patient" lié à chaque médecin? Cela peut être n'importe quel patient du dossier.

Je suis impatient de voir quelque chose comme ceci:

 
Hospital Doctor Patient 
    A  D1  P11 
    A  D2  P21 
    B  D6  P61 
    B  D7  P71

Comment puis-je obtenir l'identifiant aussi dans le tableau ci-dessus comme:

 
id Hospital Doctor Patient 
1 A  D1  P11 
3 A  D2  P21 
2 B  D6  P61 
5 B  D7  P71

Merci à l'avance

Répondre

6

Vous aimez cette :

SELECT Hospital, Doctor, MAX(Patient) 
FROM table 
GROUP BY Hospital, Doctor 
ORDER BY Hospital, Doctor 

Puisque vous avez dit que vous ne vous souciez pas de quel patient, j'ai simplement utilisé MAX, mais vous pouvez aussi utiliser MIN ou une autre fonction de regroupement.

+0

vous devriez probablement ajouter le ORDER BY Hospital, Docteur aussi. – sfossen

+0

bon point, je vais ajouter que –

+0

Merci beaucoup Eric.C'était très simple answerand très utile. – Giridhar

1

Je ne peux pas m'empêcher de demander si cela ne devrait pas être trois tables, pas un. Il y a certainement une relation de 1: m entre l'hôpital et le médecin, et une autre de 1: m entre le médecin et le patient. Chaque entité doit avoir d'autres attributs. Pourquoi tout cela dans une seule table? Je le normaliserais.

Je ne comprends pas l'exigence qui dirait P61 ou P63 devrait être préféré pour D6 dans l'hôpital B, mais je suis sûr que vous le faites.

1

Eric a répondu à la question, étant donné le tableau ci-dessus.

Dans le cas où vous avez le contrôle sur la conception de base de données:

Si un médecin ne peut fonctionner que dans un hôpital, alors la table médecin doit avoir un HospitalId. Et si un patient ne peut réellement avoir qu'un seul médecin, la table Patient doit avoir un DoctorId.

Patient >> Médecin >> Hôpital. Cela éliminerait alors complètement ce tableau, qui semble soutenir une relation plusieurs-à-plusieurs entre les médecins, les hôpitaux et les patients, ce qui n'est pas possible selon vous. Vous voudrez peut-être rester flexible cependant.

Questions connexes