Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 26/08/2011, 14h22   #1
Membre habitué
 
Avatar de tfc3146
 
Homme Robert Labrousse
Développeur décisionnel
Inscription : février 2009
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Robert Labrousse
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Boutique - Magasin

Informations forums :
Inscription : février 2009
Messages : 79
Points : 134
Points : 134
Par défaut Problème jointure SQL Server

Bonjour, je cherche à afficher uniquemement dans ma table de dimenions les lignes qui ont des COD_NAT répartis sur des COD_CHA différents.
Ensutie, je veux jointer sur ma table de faits sur ces deux attributs pour ressortir les COD_SOC qui leurs sont rattachées.

PS : la première requête passe, c'est à partir du JOIN que SQL Server "gueule"
Pourquoi cette requête ne passe pas sous SQL Server ? Je me doute que c'est à cause de ma sous requête au dessus, mais pour l'instant je ne vois pas comment faire autrement. Une idée ?
Merci.

Code :
1
2
3
4
5
6
7
8
9
 
SELECT D1.*,F.COD_CHA
FROM MatabDim D1
 WHERE EXISTS ( SELECT D2.*
		FROM MatabDim D2
		WHERE D1.COD_NAT=D2.COD_NAT
		AND D1.COD_CHA<>D2.COD_CHA )
JOIN MaTabFaits F ON F.COD_NAT=D1.COD_NAT 
WHERE F.COD_CHA=D1.COD_CHA
__________________
Citation:
C'est en faisant n'importe quoi qu'on devient n'importe qui
Si un message vous a aidé, n'hésitez pas à mettre +1
tfc3146 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 14h30   #2
Membre habitué
 
Avatar de tfc3146
 
Homme Robert Labrousse
Développeur décisionnel
Inscription : février 2009
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Robert Labrousse
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Boutique - Magasin

Informations forums :
Inscription : février 2009
Messages : 79
Points : 134
Points : 134
C'est souvent 30s après avoir posté que l'on trouve la réponse.

Je mets quand même la requête, ça peut aider d'autres personnes :

Code :
1
2
3
4
5
6
7
8
9
 
SELECT DISTINCT D1.COD_CHA,D1.COD_NAT, F.COD_SOC
FROM Dimension D1
JOIN Faits F ON F.COD_NAT=D1.COD_NAT AND F.COD_CHA=D1.COD_CHA	
WHERE EXISTS (   SELECT D2.*
	             FROM DimensionD2
	             WHERE D1.COD_NAT=D2.COD_NAT
		AND D1.COD_CHA<>D2.COD_CHA )
ORDER BY D1.COD_NAT
__________________
Citation:
C'est en faisant n'importe quoi qu'on devient n'importe qui
Si un message vous a aidé, n'hésitez pas à mettre +1
tfc3146 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 20h26   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
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 669
Points : 8 729
Points : 8 729
Bonjour,

Effectivement la première requête est syntaxiquement incorrecte.
L'ordre d'écriture d'une requête SQL est toujours :

1. SELECT / INSERT / UPDATE / DELETE
2. FROM / JOIN / APPLY
3. WHERE / AND / OR
4. GROUP BY / HAVING
5. ORDER BY

L'INSERT est un peu un cas particulier mais le squelette est là

On peut aussi écrire la requête comme suit :

Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT		DISTINCT D1.COD_CHA
		, D1.COD_NAT
		, F.COD_SOC
FROM		dbo.Dimension AS D1
INNER JOIN	dbo.Faits AS F
			ON F.COD_NAT = D1.COD_NAT
			AND F.COD_CHA = D1.COD_CHA
INNER JOIN	dbo.Dimension AS D2
			ON D1.COD_NAT = D2.COD_NAT
			AND D1.COD_CHA <> D2.COD_CHA
ORDER BY	D1.COD_NAT
@++
__________________
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é Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h08.


 
 
 
 
Partenaires

Hébergement Web