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 14/12/2010, 12h26   #1
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Par défaut Jointure sur une même table

Bonjour,

Je souhaite réaliser une jointure sur une même table (auto-jointure) pour comparer les lignes une à une en fonction de trois conditions (comprises dans les conditions de jointure).

Voici ma requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT 
	T1.CODE_EXP AS CODE1,	
	T2.CODE_EXP AS CODE2,
	T2.LOT,	
	T2.MARQUEUR,
	T2.VALEUR,
	T1.LOT,		
	T1.MARQUEUR,
	T1.VALEUR
FROM TEST AS T2 INNER JOIN TEST AS T1 
	ON T2.MARQUEUR = T1.MARQUEUR 
		AND T2.SETS = T1.SETS
			AND T2.CODE_EXP <> T1.CODE_EXP
Ma demande est simple, cette me requête me retourne, une ligne d'enregistrement avec CODE1 = A et CODE2 = B mais aussi l'inverse CODE1 = B et CODE2 = B.

Or je ne voudrais retourner qu'une seule association de A et B, dans un seul sens et non l'inverse c'est-à-dire l'association B et A, pour des questions de traitements, de temps ...

Si vous avez une solution, je suis preneur ou si tout simplement cela est impossible ! Merci de m'éclairer ...

Cordialement
__________________
while (true) echo 'comique';
Du comique de répétition ...
Pour des questions de lisibilité, utilisez la balise [code]
Si votre problème est résolu, n'oubliez pas le tag
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h22   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonjour,

Merci de nous donner la DDL de votre table ainsi qu'un jeu de donnees.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h33   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 766
Points : 17 766
Il faut utiliser le ROW VALUE CONSTRUCTOR avec une inégalité pour ne pas prendre en compte les faux doublons....

A lire : http://sqlpro.developpez.com/cours/sqlaz/select/#L8

DONC :

Code :
1
2
3
ON  T2.MARQUEUR > T1.MARQUEUR
OR (T2.MARQUEUR = T1.MARQUEUR AND T2.SETS > T1.SETS)
OR (T2.MARQUEUR = T1.MARQUEUR AND T2.SETS = T1.SETS AND T2.CODE_EXP > T1.CODE_EXP)

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h45   #4
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Structure de ma table :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
CREATE TABLE [dbo].[TEST](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[CODE_FICHE] [int] NULL,
	[MARQUEUR] [char](15) COLLATE French_CI_AS NULL,
	[LOT] [char](50) COLLATE French_CI_AS NULL,
	[VALEUR] [char](20) COLLATE French_CI_AS NULL,
	[CODE_EXP] [char](30) COLLATE French_CI_AS NULL,
	[TYPE] [char](1) COLLATE French_CI_AS NULL,
	[SETS] [char](10) COLLATE French_CI_AS NULL,
 CONSTRAINT [PK_LAB] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)
WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Jeux de données possible :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
610629	972	1108 0--0*  147*  38A2042* L	GENO*****
610630	972	1175 0--0*  152*  38A2042* L	GENO*****
610632	972	1208 0--0*  121*  38A2042* L	GENO*****
610658	1282	1108 0--0*  147*  80A8107* L	GENO*****
610659	1632	1131 0--0*  126*  LEJ42*** L	GENO*****
610660	1632	1138 0--0*  205*  LEJ42*** L	GENO*****
610662	1632	1175 0--0*  161*  LEJ42*** L	GENO*****
610664	1632	1237 0--0*  169*  LEJ42*** L	GENO*****
610665	1632	1257 0--0*  204*  LEJ42*** L	GENO*****
610666	1632	1270 0--0*  175*  LEJ42*** L	GENO*****
610668	1282	1131 0--0*  118*  80A8107* L	GENO*****
610669	1282	1138 0--0*  195*  80A8107* L	GENO*****
610671	1282	1208 0--0*  136*  80A8107* L	GENO*****
610672	1282	1237 0--0*  169*  80A8107* L	GENO*****
__________________
while (true) echo 'comique';
Du comique de répétition ...
Pour des questions de lisibilité, utilisez la balise [code]
Si votre problème est résolu, n'oubliez pas le tag
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h47   #5
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Merci SQLPro, je met en place cette solution de suite ...

Cordialement
__________________
while (true) echo 'comique';
Du comique de répétition ...
Pour des questions de lisibilité, utilisez la balise [code]
Si votre problème est résolu, n'oubliez pas le tag
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 14h10   #6
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Le problème étant que cette fonction n'est pas disponible sous SQL Server 2005 ?

Comment puis-je contourner ??????

[EDIT]

Je pense avoir réussi en rajoutant une condition de ma jointure à savoir : T1.ID > T2.ID. J'utilise l'ID, soit la clé primaire de ma table, en ne prenant que les ID supérieur pour le parcours T1 par rapport à T2.

Ma requête devient alors :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT 
	T1.CODE_FICHE,	
	T2.CODE_FICHE,
	T1.CODE_EXP AS CODE1,	
	T2.CODE_EXP AS CODE2,
	T2.LOT,	
	T2.MARQUEUR,
	T2.VALEUR,
	T1.LOT,		
	T1.MARQUEUR,
	T1.VALEUR
FROM TEST AS T2 INNER JOIN TEST AS T1 
	ON T2.MARQUEUR = T1.MARQUEUR 
		AND T2.SETS = T1.SETS
			AND T2.CODE_EXP <> T1.CODE_EXP
				AND T1.ID > T2.ID
Cordialement
__________________
while (true) echo 'comique';
Du comique de répétition ...
Pour des questions de lisibilité, utilisez la balise [code]
Si votre problème est résolu, n'oubliez pas le tag
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 15h26   #7
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 766
Points : 17 766
Relis le "DONC" de mon post précédent !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h21.


 
 
 
 
Partenaires

Hébergement Web