Regrouper les resultat d'une requete sql
Résolu
juliusescalibus
Messages postés
39
Date d'inscription
Statut
Membre
Dernière intervention
-
juliusescalibus Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
juliusescalibus Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Sql fusionner 2 lignes
- Supercopier 2 - Télécharger - Gestion de fichiers
- Comment fusionner des pdf sans logiciel - Guide
- Fusionner 2 cellules excel - Guide
- Fusionner 2 tableaux excel - Guide
- Fusionner mp3 - Télécharger - Audio & Musique
4 réponses
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
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...
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
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
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
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
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
est-ce une base local ? base distante ?