|
Débuté par Roland, 28 nov. 2022 06:33 - 10 réponses |
| |
| | | |
|
| |
Posté le 28 novembre 2022 - 06:33 |
Bonjour, j'ai une table avec des ruptures et je souhaiterai compter dans chaque rupture, le nombre de ligne qui on une cellule vide par ex:
Compter le nombre de "date_ départ" pas saisie pour chaque rupture
compter le nombre total par rupture c 'est bon , mais avec un filtre de sélection ??
Par avance merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 389 messages Popularité : +227 (347 votes) |
|
Posté le 28 novembre 2022 - 10:03 |
Bonjour, Pourquoi ne pas ajouter dans ta requête le compte de ces dates vides pour l'élément de rupture. Il suffit ensuite d'affecter cette valeur à un libellé situé dans la rupture
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
Posté le 28 novembre 2022 - 10:16 |
bonjour, merci pour la piste , j avais déjà toutes les données dans table je pensais plus simple de parcourir les ruptures et compter les valeurs vide ou nulle comme font les calculs automatique dans les tables mais avec une condition, c est pas possible?
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 389 messages Popularité : +227 (347 votes) |
|
Posté le 28 novembre 2022 - 11:44 |
9a doit être possible, mais 1-Ce n'est pas élégant 2-Cela risque d'augmenter énormément ton temps de traitement, surtout si tu as de nombreuses données (ordre n^2)
Pour chaque rupture VerifierTable Afficher DateVide FinPour n parcours VérifierTable :
Pour chaque Ligne SI Ligne est DANS rupture SI Date vide OU nulle NbDateVide++ FinSi FinSi FIN n parcours VérifierTable est exécuté n fois, il y a donc n^2 parcours d'où l'ordre n^2
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
Posté le 28 novembre 2022 - 11:53 |
Merci, bon rien de bien simple apparemment , j ai peur de partir dans une usine a gaz !!
je vais y réfléchir
Cordialement |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 389 messages Popularité : +227 (347 votes) |
|
Posté le 28 novembre 2022 - 13:11 |
Prenons le cas suivant :

On veut afficher les commandes des clients (rupture sur client.) Les dates de commandes vide se récupèrent via la requête :
SELECT Commande.FK_Client AS FK_Client, COUNT(NVL(Commande.NDX_DateCommande,'')) AS NbDateVide FROM Commande WHERE NVL(Commande.NDX_DateCommande,'') = '' GROUP BY Commande.FK_Client Il suffit d'ajouter cette sous-requête à la requête principale :
SELECT Client.AK_NoClient AS NoClient, Client.NDX_NomClient AS NomClient, Commande.AK_NoCommande AS NoCommande, REQ_DateVide.NbDateVide AS NbDateVide FROM ( Client INNER JOIN Commande ON Client.PK_Client = Commande.FK_Client ) LEFT OUTER JOIN ( SELECT Commande.FK_Client AS FK_Client, COUNT(NVL(Commande.NDX_DateCommande,'')) AS NbDateVide FROM Commande WHERE NVL(Commande.NDX_DateCommande,'') = '' GROUP BY Commande.FK_Client ) REQ_DateVide ON REQ_DateVide.FK_Client = Client.PK_Client ORDER BY Client.AK_NoClient
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
Posté le 28 novembre 2022 - 14:08 |
merci beaucoup pour la requête sql je vais m y mettre (pas trop le choix on dirait)
j ai contourné comme j ai pu , j ai le nb total de la rupture par un calcul automatique (comptage),
j'ai une colonne caché avec des 1 si date est vide donc avec le total de la colonne et un calcul auto (somme)
le nb a diviser , car en fait c est pour un calcul de % , mais j arrive pas encore a trouvé a quel moment , en fin de rupture je suppose, je peux faire le calcul avec les libellé dans la rupture qui ont les bonnes valeurs.
j ai essayé de mettre une copie écran mais impossible bug le site veut pas.
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 389 messages Popularité : +227 (347 votes) |
|
Posté le 28 novembre 2022 - 16:24 |
Là encore, il faut passer par une sous-requête COUNT
SELECT Commande.FK_Client AS FK_Client, COUNT(Commande.NDX_DateCommande) AS NbCommande FROM Commande GROUP BY Commande.FK_Client Ce qui donne :
SELECT Client.PK_Client AS PK_Client, Client.AK_NoClient AS NoClient, Client.NDX_NomClient AS NomClient, Commande.AK_NoCommande AS NoCommande, Commande.NDX_DateCommande AS DateCommande, NVL(REQ_DateVide.NbDateVide,0) AS NbDateVide, REQ_NbCommande.NbCommande AS NbCommande, NVL((NbDateVide/NbCommande)*100,0) AS PctCommandeVide FROM ( ( ( SELECT Commande.FK_Client AS FK_Client, COUNT(NVL( Commande.NDX_DateCommande , '') ) AS NbDateVide FROM Commande WHERE NVL( Commande.NDX_DateCommande , '') = '' GROUP BY Commande.FK_Client ) REQ_DateVide RIGHT OUTER JOIN Client ON REQ_DateVide.FK_Client = Client.PK_Client ) INNER JOIN Commande ON Client.PK_Client = Commande.FK_Client ) INNER JOIN ( SELECT Commande.FK_Client AS FK_Client, COUNT(Commande.NDX_DateCommande) AS NbCommande FROM Commande GROUP BY Commande.FK_Client ) REQ_NbCommande ON REQ_NbCommande.FK_Client = Client.PK_Client ORDER BY Client.AK_NoClient En supposant que tu désires afficher cela dans ton bas de rupture (RUPT_NonRenseigné), il suffit d'ajouter un libellé (LIB_NonRenseigné) Le code d'affichage du bas de rupture devient :
nIndBasRupture est un entier
nIndBasRupture = TableIndiceRupture(RUPT_NonRenseigné)
TABLE_CommandeClient[nIndBasRupture].LIB_NonRenseigné = ... ChaîneConstruit("%1 % Non renseigné",NumériqueVersChaîne(COL_NonRenseigné,"4,2f"))
-- Il y a peut être plus simple, mais, ça tourneMessage modifié, 28 novembre 2022 - 16:25 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
Posté le 28 novembre 2022 - 16:52 |
J avais vu se code (de vous apparemment sur un autre forum)
nHaut est un entier nBas est un entier
nHaut=TableIndiceRupture(RUPT_HautRupture1) nBas=TableIndiceRupture(RUPT_BasRupture1) SI nHaut=nBas ALORS TABLE_Test[nBas].LIB_NbLigne="1 Ligne" SINON TABLE_Test[nBas].LIB_NbLigne=ChaîneConstruit("%1 Lignes",nBas-nHaut+1) FIN
avec les indice de début et de fin de la rupture il n'y a pas moyen de cumuler une colonne ? entre le début et la fin ?Message modifié, 28 novembre 2022 - 16:53 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 389 messages Popularité : +227 (347 votes) |
|
Posté le 29 novembre 2022 - 08:37 |
ROLLLY a écrit :
avec les indice de début et de fin de la rupture il n'y a pas moyen de cumuler une colonne ? entre le début et la fin ?
Si, il suffit de parcourir le champ table entre l'indice de haut de rupture et l'indice de bas de rupture lors de l'affichage de la rupture un truc du style :
nRuptureHaut est un entier nRuptureBas est un entier nNbLigne est un entier nNbVide est un entier xPctVide est numérique (3,2)
nRuptureHaut= TableIndiceRupture(RUPT_Client) nRuptureBas= TableIndiceRupture(RUPT_NonRenseigné) nNbLigne= nRuptureBas-nRuptureHaut+1 nNbVide= RechercherDatesVides(nRuptureHaut,nRuptureBas) xPctVide= nNbVide/nNbLigne*100
TABLE_CommandeClient[nRuptureBas].LIB_NonRenseigné = ChaîneConstruit("%1% Non renseigné",xPctVide) Avec :
Procedure RechercherDatesVides(LOCAL nIndHaut est entier,LOCAL nIndBas est entier) nNbVide est un entier nLigneEnCours est un entier
POUR nLigneEnCours=nIndHaut _À_ nIndBas SI COL_DateCommande[nLigneEnCours]="" ALORS nNbVide++ FIN FIN
RENVOYER nNbVide
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
Posté le 29 novembre 2022 - 10:09 |
| |
| |
| | | |
|
| | | | |
| | |
|