Regrouper les resultat d'une requete sql
Résolu/Fermé
juliusescalibus
Messages postés
39
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
3 octobre 2014
-
30 janv. 2014 à 14:28
juliusescalibus Messages postés 39 Date d'inscription jeudi 9 janvier 2014 Statut Membre Dernière intervention 3 octobre 2014 - 3 févr. 2014 à 17:19
juliusescalibus Messages postés 39 Date d'inscription jeudi 9 janvier 2014 Statut Membre Dernière intervention 3 octobre 2014 - 3 févr. 2014 à 17:19
A voir également:
- Sql fusionner 2 lignes
- Supercopier 2 - Télécharger - Gestion de fichiers
- Comment fusionner 2 pdf - Guide
- Fusionner 2 cellules excel - Guide
- Fusionner 2 tableaux excel - Guide
- 2 ecran pc - Guide
4 réponses
Killburns911
Messages postés
293
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
25 avril 2023
15
30 janv. 2014 à 14:33
30 janv. 2014 à 14:33
Le distinct que tu utilise dans la requête , c'est ça le "secret" mais je ne sait plus exactement pourquoi , mais la ta requête avec le distinct ne semble pas marché
car le distinct fait que , quand il a trouvé un résultat , il vas ignoré les autres , c'est bizarre qu'il te sorte plusieurs fois le même client
car le distinct fait que , quand il a trouvé un résultat , il vas ignoré les autres , c'est bizarre qu'il te sorte plusieurs fois le même client
juliusescalibus
Messages postés
39
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
3 octobre 2014
30 janv. 2014 à 15:41
30 janv. 2014 à 15:41
j'utilise sql server management . sur une base presente sur un server local.
c'est moi qui auris dû le preciser...
c'est moi qui auris dû le preciser...
Killburns911
Messages postés
293
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
25 avril 2023
15
30 janv. 2014 à 15:49
30 janv. 2014 à 15:49
dans ce cas , si tu met les deux distinct , comme tu l'avais écris au départ , et comme j'ai écris le mien , ca ne marche pas ?
je suis au travail , je n'ai pas l'opportunité de t'aidez plus que ca :/
je suis au travail , je n'ai pas l'opportunité de t'aidez plus que ca :/
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
31 janv. 2014 à 11:16
31 janv. 2014 à 11:16
Bonjour,
Quel do_piece doit-on récupérer ? Le plus petit ?
Dans ce cas, essaie cette requête :
Xavier
Quel do_piece doit-on récupérer ? Le plus petit ?
Dans ce cas, essaie cette requête :
SELECT MIN(FinDevis.do_piece), FinDevis.do_client, FinDevis.DO_NomCli, COUNT (*) as nbdev FROM FinDevis, FinLigDevis WHERE findevis.DO_Date BETWEEN '01/1/2013' AND '29/01/2014' AND FinDevis.DO_Piece = FinLigDevis.DO_Piece GROUP BY FinDevis.do_client, FinDevis.DO_NomCli ORDER BY DO_NomCli
Xavier
juliusescalibus
Messages postés
39
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
3 octobre 2014
31 janv. 2014 à 11:39
31 janv. 2014 à 11:39
merci pour ta reponse Reivax962 ...
çà semble donner ce qu'il me faut ...
j'aurais 2 questions cela dit : que fait MIN(FinDevis.do_piece) ?
a quoi sert count(*) ?
car lorsque je l'utilise comme çà cela me donne un resultat different de ce que j'attends , par contre j'obtient bien ce que je veux avec COUNT (distinct FinDevis.do_piece).
MERCI ENCORE
çà semble donner ce qu'il me faut ...
j'aurais 2 questions cela dit : que fait MIN(FinDevis.do_piece) ?
a quoi sert count(*) ?
car lorsque je l'utilise comme çà cela me donne un resultat different de ce que j'attends , par contre j'obtient bien ce que je veux avec COUNT (distinct FinDevis.do_piece).
MERCI ENCORE
juliusescalibus
Messages postés
39
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
3 octobre 2014
31 janv. 2014 à 11:56
31 janv. 2014 à 11:56
SELECT max (FinDevis.do_piece) ou SELECT min (FinDevis.do_piece).
cela ne change pas mon resultat de requete...
cela ne change pas mon resultat de requete...
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
31 janv. 2014 à 13:34
31 janv. 2014 à 13:34
Cela devrait changer le do_piece renvoyé.
En fait, dans le GROUP BY que tu proposais, tu intégrais do_piece. Comme ceux-ci sont différents, SQL Server ne les regroupe pas en une seule ligne.
Il faut donc supprimer do_piece de ton GROUP BY, ce que j'ai fait.
Mais comme tu voulais quand même cette information, il fallait en choisir un parmi ceux qui existent. MIN pour prendre le plus petit, MAX pour prendre le plus grand.
Le count(*), c'est pour compter le nombre de lignes qui contiennent les mêmes do_client et do_nomcli, sans restriction.
Avec COUNT(distinct FinDevis.do_piece), tu comptes le nombre de do_pieces différents parmi les lignes qui ont les mêmes do_client et do_nomcli.
Ils sont équivalents si chaque ligne a un do_piece différent, mais si tu as des doublons de do_pieces leur valeur sera différente. À toi de choisir celui qui te convient.
Xavier
En fait, dans le GROUP BY que tu proposais, tu intégrais do_piece. Comme ceux-ci sont différents, SQL Server ne les regroupe pas en une seule ligne.
Il faut donc supprimer do_piece de ton GROUP BY, ce que j'ai fait.
Mais comme tu voulais quand même cette information, il fallait en choisir un parmi ceux qui existent. MIN pour prendre le plus petit, MAX pour prendre le plus grand.
Le count(*), c'est pour compter le nombre de lignes qui contiennent les mêmes do_client et do_nomcli, sans restriction.
Avec COUNT(distinct FinDevis.do_piece), tu comptes le nombre de do_pieces différents parmi les lignes qui ont les mêmes do_client et do_nomcli.
Ils sont équivalents si chaque ligne a un do_piece différent, mais si tu as des doublons de do_pieces leur valeur sera différente. À toi de choisir celui qui te convient.
Xavier
juliusescalibus
Messages postés
39
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
3 octobre 2014
3 févr. 2014 à 17:19
3 févr. 2014 à 17:19
merci à vous pour votre aide ...
je m'en suis sortie !!!
je m'en suis sortie !!!
30 janv. 2014 à 14:36
ton distinct est mal placé en fait , cela ressemblerais plus a ceci
Select FinDevis.do_piece, FinDevis.do_client, (distinct FinDevis.DO_NomCli),COUNT FinDevis.do_piece as nbdev
30 janv. 2014 à 14:58
mon distinct est donc là pour ne prendre qu'un resultat et donc qu'un do_piece .
mais je voudrais regrouper sur une ligne clients le nombre de devis trouver
30 janv. 2014 à 15:35
est-ce une base local ? base distante ?