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 11/05/2011, 12h47   #1
Nouveau Membre du Club
 
Avatar de kodo
 
Inscription : mars 2006
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 203
Points : 25
Points : 25
Par défaut probleme avec la clause group by

Bonjour tout le monde,
voila la structure de mes tables de ma base de donnée :
Table01 :
id | num |taux

la table Table02 contient les num qui sont en double dans la table Table01 .

Table02 :
num |nbrDoublons

je cherche à écrire une requête sql qui permet de me retourner l'id, le num, et le min(taux) des lignes qui se répètent dans la table Table01.

voila la requête que j'ai écrit :

Code :
1
2
3
4
5
 
SELECT     t.id, t.num, MIN(t.taux) AS Expr1
FROM         Table01 t INNER JOIN
                      Table02 c ON t.num = c.num
GROUP BY t.id, t.num
Mais ça me retourne les doublons aussi, et ne me retourne pas juste les lignes avec le min, mais avec :
Code :
1
2
3
4
5
 
SELECT     t.num, MIN(t.taux) AS Expr1
FROM         Table01 t INNER JOIN
                      Table02 c ON t.num = c.num
GROUP BY t.num
ça me donne le bon résultat.

pouvez vous me dire ce que je dois modifier ma première requête pour avoir le bon résultat ?

Merci de votre aide
kodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 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
Votre regroupement n'est pas bon.
Avec votre requête vous voulez pour chaque regroupement de colonne [id] et colonne [num] la valeur minimale de [taux]. Or ici la colonne [id] change tout le temps donc chaque regroupe de [id] et de [num] sera différent unique à chaque fois.

Essayez ceci (une solution parmi tant d'autres) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH CTE
AS
(
 SELECT 
  ROW_NUMBER() OVER(PARTITION BY t.num ORDER BY t.id, t.num, t.taux) AS [ORDER],
  t.id,
  t.num,
  t.taux
 FROM  Table01 t 
INNER JOIN Table02 c 
 ON t.num = c.num
)
SELECT 
 id,
 num,
  taux
FROM CTE
WHERE [ORDER] = 1;
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 09h07   #3
Futur Membre du Club
 
Homme Stéphane Bouvet
Chef de projet MOA
Inscription : mai 2011
Messages : 40
Détails du profil
Informations personnelles :
Nom : Homme Stéphane Bouvet
Âge : 35
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Biens de consommation

Informations forums :
Inscription : mai 2011
Messages : 40
Points : 15
Points : 15
ESt-ce qu'une requête du type
Code :
1
2
3
4
5
6
7
 
SELECT	[ID], Table01.NUM, MIN_TAUX
FROM	(SELECT Table01.NUM, MIN(TAUX) AS MIN_TAUX
	FROM	Table01
		INNER JOIN Table02 ON Table01.NUM = Table02.NUM
	GROUP BY Table01.NUM) cherche_min
	INNER JOIN Table01 ON cherche_min.NUM = Table01.NUM
apporte le résultat escompté ?
darKStein 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 07h53.


 
 
 
 
Partenaires

Hébergement Web