Aller au contenu

SQL help


Messages recommandés

Voilà pouvez vous me dire si mes requetes sql sont justes?

Voilà le MLD:

Interlocuteur(CodeInterlocutaire,NomInterlocuteur)

Bureau(CodeBureau,VilleBureau,Pays)

Contacter(CodeBureau#,CodeInterlocuteur#,JJMMAAAA,Commentaire)

Secteur(CodeSecteur,LibelleSecteur)

Client(CodeClient,RaisonSocialeClient,AdresseClient)

Exercer(CodeClient#,CodeSecteur#)

Contrat(RefContrat,ObjetContrat,DateContrat,TauxComission,MontantContrat,CodeBureau#,CodeClient#,CodeInterlocuteur#)

On me demande - Montant total des contrats conclus par le bureau de la ville de Bakou

- Nombre de contrats signés avec l'Azerbaidjan en 2003

Mes réponses :

- Select sum(MontantContrat*TauxComission) as [Montant Total des contrats]

From Contrat C,Bureau B

Where C.Refcontrat=B.Refcontrat

and VilleBureau="Bakou";

- Select Refcontrat, Datecontrat,Pays

From Contrat C,Bureau B

Where C.Refcontrat=B.Refcontrat and Datecontrat=2003, Pays="Azerbaidjan";

Lien vers le commentaire
Partager sur d’autres sites

Pour tes jointures entre Contrat et Bureau, Refcontrat n'est pas dans bureau, utilise CodeBureau (C.CodeBureau=B.CodeBureau)

Pour la 2nde réponse:

Datecontrat c'est une année ou une date :transpi:

Si c'est une date utilise un beetween

Sinon pour cette question on te demande le nombre de contrat et non la liste de ces contrats; donc il faut faire un count(Refcontrat) avec order by Pays à la fin (quoique, je sais pas si le order by est nécessaire...)

Lien vers le commentaire
Partager sur d’autres sites

Quelques petites remarques :

1) premiere requete :

- l'egalite doit etre sur CodeBureau et non sur RefContrat

- pour optimiser ta requete et gagner en lisibilite, il vaut mieux creer une sous requete.

SELECT sum(MontantContrat) as [Montant Total des contrats] FROM Contrat WHERE CodeBureau IN
(SELECT CodeBureau FROM Bureau WHERE VilleBureau="Bakou");

Tu evites ainsi de creer une jointure (tres couteuse en temps pour les grandes tables).

2) L'utilisation des sous requetes est a nouveau utile pour la deuxieme question :

Premiere etape, les bureaux qui sont en Azer machin :

SELECT CodeBureau FROM Bureau WHERE Pays='Azermachin';

Deuxieme etape, le nombre de contrat en 2003 :

SELECT COUNT(*) FROM Contrat WHERE DateContrat like '____2003';

(le '_' indique un caractere generique, si la date est dans le format JJMMAAAA, tu mets 4 '_' )

Au final ta requete complete est donc :

SELECT COUNT(*) FROM Contrat WHERE DateContrat like '____2003' AND CodeBureau IN 
(SELECT CodeBureau FROM Bureau WHERE Pays='Azermachin');

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...