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
bonjour,

voici ma requete actuelle :

Select FinDevis.do_piece, FinDevis.do_client, FinDevis.DO_NomCli,COUNT (distinct FinDevis.do_piece) 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_piece, FinDevis.do_client, FinDevis.DO_NomCli

order by DO_NomCli

et voici le resultat :

do_piece do_client DO_NomCli nbdev
DE132474 PROSPECT ACHACHE 1
DE132738 PROSPECT CROIX DES VENTS 1
DE132739 PROSPECT CROIX DES VENTS 1
DE132740 PROSPECT CROIX DES VENTS 1
DE132743 PROSPECT CROIX DES VENTS 1
DE123295 PROSPECT A VOUS DE JOUER 1
DE130280 PROSPECT A.2T.M 1
DE132455 PROSPECT A.S.P 1
DE131342 413991 A2F MENUISERIE 1
DE131362 413991 A2F MENUISERIE 1
DE130650 413991 A2F MENUISERIE 1
DE123591 413991 A2F MENUISERIE 1
DE123814 413991 A2F MENUISERIE 1

j'aimerais regrouper par les lignes concernant le meme client en une seule .soit ceci:

DE132474 PROSPECT ACHACHE 1
DE132738 PROSPECT CROIX DES VENTS 4
DE123295 PROSPECT A VOUS DE JOUER 1
DE130280 PROSPECT A.2T.M 1
DE132455 PROSPECT A.S.P 1
DE131342 413991 A2F MENUISERIE 5

merci d'avance pour votre aide
A voir également:

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
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
0
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:36
Okay , j'ai rien dit , regarde ce que j'ai ecris :P

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
0
juliusescalibus Messages postés 39 Date d'inscription jeudi 9 janvier 2014 Statut Membre Dernière intervention 3 octobre 2014
30 janv. 2014 à 14:58
cela ne marche pas car le logiciel utilisant cette base creer dans celle ci une nouvelle ligne à chaque modif de faite sur le devis (ex de132738) .( le tous affecter au meme do_piece = DE132738)
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
0
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:35
c'est une question que j'aurais du poser depuis le depart , quel est le SGDBR que tu utilise ?
est-ce une base local ? base distante ?
0
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
j'utilise sql server management . sur une base presente sur un server local.
c'est moi qui auris dû le preciser...
0
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
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 :/
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
31 janv. 2014 à 11:16
Bonjour,

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
0
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
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
0
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
SELECT max (FinDevis.do_piece) ou SELECT min (FinDevis.do_piece).
cela ne change pas mon resultat de requete...
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
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
0
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
merci à vous pour votre aide ...
je m'en suis sortie !!!
0