Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/05/2011, 09h03   #1
Membre du Club
 
Inscription : décembre 2004
Messages : 131
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 131
Points : 69
Points : 69
Par défaut Est-ce possible ?

Bonjour, le titre n'est pas très parlant donc je vair tenter d'être le plus précis possible.

Soit les tables suivantes :

Code :
1
2
3
code(idCode, code, type)
zone(idZone, codeZone, libelle)
DATA(code,tarif_zone1,tarif_zone2,tarif_zone3)

code contient :
1 1 voiture
2 110 camion
3 210 avion

zone contient :
1 zone1 paris
2 zone2 marseille
3 zone3 madrid

data contient:
1 10 20 30
2 40 60 30
3 10 10 50

En exécutant la requête suivante :

Code :
1
2
3
4
SELECT d.code, type,idZone, codeZone, libelle
FROM DATA d
INNER JOIN code cde ON cde.CODE=d.code
CROSS JOIN zone
j'obtiens
Code :
1
2
3
4
5
6
7
8
9
 
code    type        tarif_zone1	tarif_zone2  tarif_zone3 idZone   codeZone  libelle
------- ----------- -----------	------ 	     ----------- -------- --------  ----------
1       voiture     10 		20 		30	 1        zone1      paris
2       camion      40 		60 		30	 2        zone2      marseille
3       Avions      10 		10 		50	 3        zone3      madrid
 
 
(3*ligne(s) affectée(s))
Est-il possible de joindre les tables code, zone et data pour avoir une unique colone tarif avec pour contenue les tarifs en fonction de la zone ?
Code :
1
2
3
4
5
6
7
8
9
code      type          tarif	 	idZone   codeZone  	libelle
--------- --------  -----------	-------- ---------- 	----------	
1         voiture       tarif_zone1 	1           zone1      	paris
2         camion        tarif_zone2 	2           zone2      	marseille
3         Avions        tarif_zone3 	3           zone3      	madrid


(3*ligne(s) affectée(s))
C'est-à-dire :
Code :
1
2
3
4
5
6
7
8
9
 
code      type          tarif	 	idZone   codeZone  	libelle
--------- --------  -----------	-------- ---------- 	----------	
1         voiture       10 	1           zone1      	paris
2         camion        60	2           zone2      	marseille
3         Avions        50 	3           zone3      	madrid
 
 
(3*ligne(s) affectée(s))
Merci d'avance
wayak3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2011, 11h24   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 668
Points : 8 718
Points : 8 718
Bonjour,

Vous ne pouvez pas écrire simplement la requête correspondant à ce que vous cherchez, parce que votre conception est fausse, et que vous utiliser mal SQL.

La définition de la table data devrait en fait être :

Code :
DATA (idCode, idZone, tarif)
De cette façon votre requête s'écrit simplement.
Je vous laisse la chercher pour vous en rendre compte.

Il se peut également que n'ayez pas de code pour une zone parce que cela ne présente aucun intérêt pour l'entreprise (pas besoin de faire un envoi par avion pour faire un Paris -> Brest par exemple).

Ensuite il se peut que vous deviez rajouter ou retirer une zone, et dans ce cas au lieu de manipuler la structure de la table en plus de ses lignes, vous n'aurez qu'à ajouter ou supprimer des lignes à l'aide de requêtes dont l'expression est triviale

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h43.


 
 
 
 
Partenaires

Hébergement Web