[Résolu] Somme conditionnelles dans une requête
Modérateur : Vilains modOOs
Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
-
- NOOuvel adepte
- Messages : 17
- Inscription : 28 janv. 2020 18:15
[Résolu] Somme conditionnelles dans une requête
Bonjour à tous,
J'avance dans une base de données de gestion de chantiers, j'attaque maintenant la gestion des paies avec. J'ai une table de pointages reliant des techniciens à des chantiers avec des temps de travail et des zones d'intervention. J'aimerai compter dans chaque mois le nombre total de jours travaillés, d'arrêts maladie, de RTT, ... , et le nombre de jours travaillés en zone 1, en zone 2, en zone 3, ... Tout ça dans une seule requête qui me servirait de base pour un rapport.
Je rencontre plusieurs soucis de sommes conditionnelles, qui je pense ont peut-être la même solution :
- Je n'arrive pas à compter le nombre de jours par mois dans chaque zone, sachant que la zone comptée pour la journée travaillée est celle du premier chantier (c'est à dire Min("Pointage"."HeureDebut") sur le jour concerné)
- Je n'arrive pas à faire la somme suivante : compter le nombre de jours par mois d'un type particulier (Travaillé, RTT, maladie, ...)
J'ai fait quelques requêtes d'essai, mais rien de concluant.
J'ai parcouru le tuto de Piaf sur les analyses croisées, mais je n'arrive pas à l'appliquer sur ma base (quand je comprends ce qu'il fait bien sûr).
Est-ce que quelqu'un peut m'aider svp ?
J'avance dans une base de données de gestion de chantiers, j'attaque maintenant la gestion des paies avec. J'ai une table de pointages reliant des techniciens à des chantiers avec des temps de travail et des zones d'intervention. J'aimerai compter dans chaque mois le nombre total de jours travaillés, d'arrêts maladie, de RTT, ... , et le nombre de jours travaillés en zone 1, en zone 2, en zone 3, ... Tout ça dans une seule requête qui me servirait de base pour un rapport.
Je rencontre plusieurs soucis de sommes conditionnelles, qui je pense ont peut-être la même solution :
- Je n'arrive pas à compter le nombre de jours par mois dans chaque zone, sachant que la zone comptée pour la journée travaillée est celle du premier chantier (c'est à dire Min("Pointage"."HeureDebut") sur le jour concerné)
- Je n'arrive pas à faire la somme suivante : compter le nombre de jours par mois d'un type particulier (Travaillé, RTT, maladie, ...)
J'ai fait quelques requêtes d'essai, mais rien de concluant.
J'ai parcouru le tuto de Piaf sur les analyses croisées, mais je n'arrive pas à l'appliquer sur ma base (quand je comprends ce qu'il fait bien sûr).
Est-ce que quelqu'un peut m'aider svp ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Bastouille le 09 avr. 2020 10:09, modifié 1 fois.
Apache OpenOffice 4.1.7 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
-
- Grand Maître de l'OOffice
- Messages : 16960
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Re: Somme conditionnelles dans une requête
Bonjour,
Comme je n'arrive pas à ouvrir la base Gestion,
J'en créerai d'abord 1 par zone, puis ensuite, une Requête des requêtes.
Comme je n'arrive pas à ouvrir la base Gestion,
la requête doit avoir la fonction Groupe pour les ID, les personnes et les mois, et la fonction COUNT pour le nombre de jours.Bastouille a écrit :Je n'arrive pas à compter le nombre de jours par mois dans chaque zone
J'en créerai d'abord 1 par zone, puis ensuite, une Requête des requêtes.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- NOOuvel adepte
- Messages : 17
- Inscription : 28 janv. 2020 18:15
Re: Somme conditionnelles dans une requête
Bonjour Jeanmimi,
Même avec une requête par zone, je suis coincé, je n'arrive pas à avoir mon résultat (Requête Paie-CalculZone1Mois). Je ne dois pas mettre la condition au bon endroit.
Je renvoie la base
Même avec une requête par zone, je suis coincé, je n'arrive pas à avoir mon résultat (Requête Paie-CalculZone1Mois). Je ne dois pas mettre la condition au bon endroit.
Je renvoie la base
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Apache OpenOffice 4.1.7 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
-
- NOOuvel adepte
- Messages : 17
- Inscription : 28 janv. 2020 18:15
Re: Somme conditionnelles dans une requête
J'ai trouvé une partie de ma réponse, j'ai mis un "CASE WHEN" sur le champ de la requête et une fonction somme, et pas une condition sur la valeur du champ "RefZone". J'obtiens donc la répartition des jours dans les zones dans ma requête "Paie-CalculZoneMois". Je vais du coup faire qqc d'approchant pour le type de jour travaillé, c'est le même genre de calcul.
Par contre, cette requête "Paie-CalculZoneMois" est calculée d'après une première requête ("Paie-CalculZoneJour") qui me donne la zone pour chaque jour, mais je n'arrive pas à avoir ce que je cherche : si un poseur travaille sur plusieurs zones dans la journée j'aimerai ne retenir pour cette journée que la zone du premier chantier (ce qui se traduit par "Pointage"."HeureDebut" est minimal sur les tous les pointages de la journée) : comment traduire cette condition dans ma requête ?
Dans ma base jointe, le poseur "NomPoseur 1" pointe le 06/04 sur la zone 2 à 8h et la zone 4 à 10:40, comment ne retenir que la zone 2 pour la journée du 06/04 ?
Par contre, cette requête "Paie-CalculZoneMois" est calculée d'après une première requête ("Paie-CalculZoneJour") qui me donne la zone pour chaque jour, mais je n'arrive pas à avoir ce que je cherche : si un poseur travaille sur plusieurs zones dans la journée j'aimerai ne retenir pour cette journée que la zone du premier chantier (ce qui se traduit par "Pointage"."HeureDebut" est minimal sur les tous les pointages de la journée) : comment traduire cette condition dans ma requête ?
Dans ma base jointe, le poseur "NomPoseur 1" pointe le 06/04 sur la zone 2 à 8h et la zone 4 à 10:40, comment ne retenir que la zone 2 pour la journée du 06/04 ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Apache OpenOffice 4.1.7 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
-
- Membre cOOnverti
- Messages : 344
- Inscription : 29 mai 2009 08:51
- Localisation : Guyane
Re: Somme conditionnelles dans une requête
Bsr,
Ajouter les critères de selection
voir modifications ds la requête concernée et sa source @+
Ajouter les critères de selection
voir modifications ds la requête concernée et sa source @+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.14 et LO 7.3.7.2 sous OsX 10.13.6 High Sierra ; Windows 10 sous AOO 4.1.14 et LibO 7.3.7.2
-
- NOOuvel adepte
- Messages : 17
- Inscription : 28 janv. 2020 18:15
Re: Somme conditionnelles dans une requête
Bonjour HRk2o,
Merci de t'être penché sur mon pb, mais ce n'est pas ce que je recherche : je ne dois pas avoir à choisir le poseur et la zone, mais j'aimerai une requête qui me donne pour tous les poseurs, pour tous les jours, soit la zone où ils ont travaillé s'ils n'ont travaillé que dans une zone dans la journée, soit s'ils ont travaillé dans plusieurs zones, la zone du premier chantier de la journée. Ma requête PaieCalculZoneMois prend le relais après pour compter le nbre de zones par mois.
Merci de t'être penché sur mon pb, mais ce n'est pas ce que je recherche : je ne dois pas avoir à choisir le poseur et la zone, mais j'aimerai une requête qui me donne pour tous les poseurs, pour tous les jours, soit la zone où ils ont travaillé s'ils n'ont travaillé que dans une zone dans la journée, soit s'ils ont travaillé dans plusieurs zones, la zone du premier chantier de la journée. Ma requête PaieCalculZoneMois prend le relais après pour compter le nbre de zones par mois.
Apache OpenOffice 4.1.7 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
-
- Membre cOOnverti
- Messages : 344
- Inscription : 29 mai 2009 08:51
- Localisation : Guyane
Re: Somme conditionnelles dans une requête
Bjr,
Comme ceci où ts les critères sont réunis: @+requête qui me donne pour tous les poseurs, pour tous les jours, soit la zone où ils ont travaillé s'ils n'ont travaillé que dans une zone dans la journée, soit s'ils ont travaillé dans plusieurs zones, la zone du premier chantier de la journée
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.14 et LO 7.3.7.2 sous OsX 10.13.6 High Sierra ; Windows 10 sous AOO 4.1.14 et LibO 7.3.7.2
-
- NOOuvel adepte
- Messages : 17
- Inscription : 28 janv. 2020 18:15
Re: Somme conditionnelles dans une requête
Bonjour,
NomPoseur1 05/04/20 04:00:00 2
Les zones où NomPoseur1 a travaillé plus tard dans la journée ne m'intéressent pas.
J'ai bien tous les poseurs pour toutes les dates où ils ont travaillé, mais il faudrait que le 05/04/20 je ne vois apparaitre dans ma requête que la ligneBastouille a écrit :soit s'ils ont travaillé dans plusieurs zones, la zone du premier chantier de la journée
NomPoseur1 05/04/20 04:00:00 2
Les zones où NomPoseur1 a travaillé plus tard dans la journée ne m'intéressent pas.
Apache OpenOffice 4.1.7 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
-
- Grand Maître de l'OOffice
- Messages : 16960
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Re: Somme conditionnelles dans une requête
Que donnerait la Fonction MInimum, dans l'ébauche de Requête sur le champ HeureDebut ?Bastouille a écrit :que le 05/04/20 je ne vois apparaitre dans ma requête que la ligne
NomPoseur1 05/04/20 04:00:00 2
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- NOOuvel adepte
- Messages : 17
- Inscription : 28 janv. 2020 18:15
Re: Somme conditionnelles dans une requête
La requête :
me donne bien l'heure du premier chantier sur la journée concernée, mais comment avoir la zone correspondant ?
Si je rajoute la zone :
ça me donne le message d'erreur suivant :
Not in aggregate function or group by clause: org.hsqldb.Expression@2a93ee0 in statement [SELECT "Techniciens"."Nom" AS "Poseur", "Pointage"."DatePointage", MIN( "Pointage"."HeureDebut" ), "Clients"."RefZone" FROM "Chantiers" LEFT OUTER JOIN "Clients" ON "Chantiers"."RefClient" = "Clients"."RefClient" RIGHT OUTER JOIN "Pointage" ON "Chantiers"."RefChantier" = "Pointage"."RefChantier" , "Techniciens" WHERE "Pointage"."RefTechnicien" = "Techniciens"."RefTechnicien" GROUP BY "Techniciens"."Nom", "Pointage"."DatePointage"]
Si je rajoute la zone avec la fonction groupe :
ça me donne deux lignes avec la journée du 6/04, avec l'heure de début du premier chantier et l'heure de début du 2e chantier : j'ai encore mes doublons !
Code : Tout sélectionner
SELECT "Techniciens"."Nom" AS "Poseur", "Pointage"."DatePointage", MIN( "Pointage"."HeureDebut" ) FROM { oj "Chantiers" LEFT OUTER JOIN "Clients" ON "Chantiers"."RefClient" = "Clients"."RefClient" RIGHT OUTER JOIN "Pointage" ON "Chantiers"."RefChantier" = "Pointage"."RefChantier" }, "Techniciens" WHERE "Pointage"."RefTechnicien" = "Techniciens"."RefTechnicien" GROUP BY "Techniciens"."Nom", "Pointage"."DatePointage"
Si je rajoute la zone :
Code : Tout sélectionner
SELECT "Techniciens"."Nom" AS "Poseur", "Pointage"."DatePointage", MIN( "Pointage"."HeureDebut" ), "Clients"."RefZone" FROM { oj "Chantiers" LEFT OUTER JOIN "Clients" ON "Chantiers"."RefClient" = "Clients"."RefClient" RIGHT OUTER JOIN "Pointage" ON "Chantiers"."RefChantier" = "Pointage"."RefChantier" }, "Techniciens" WHERE "Pointage"."RefTechnicien" = "Techniciens"."RefTechnicien" GROUP BY "Techniciens"."Nom", "Pointage"."DatePointage"
Not in aggregate function or group by clause: org.hsqldb.Expression@2a93ee0 in statement [SELECT "Techniciens"."Nom" AS "Poseur", "Pointage"."DatePointage", MIN( "Pointage"."HeureDebut" ), "Clients"."RefZone" FROM "Chantiers" LEFT OUTER JOIN "Clients" ON "Chantiers"."RefClient" = "Clients"."RefClient" RIGHT OUTER JOIN "Pointage" ON "Chantiers"."RefChantier" = "Pointage"."RefChantier" , "Techniciens" WHERE "Pointage"."RefTechnicien" = "Techniciens"."RefTechnicien" GROUP BY "Techniciens"."Nom", "Pointage"."DatePointage"]
Si je rajoute la zone avec la fonction groupe :
Code : Tout sélectionner
SELECT "Techniciens"."Nom" AS "Poseur", "Pointage"."DatePointage", MIN( "Pointage"."HeureDebut" ), "Clients"."RefZone" FROM { oj "Chantiers" LEFT OUTER JOIN "Clients" ON "Chantiers"."RefClient" = "Clients"."RefClient" RIGHT OUTER JOIN "Pointage" ON "Chantiers"."RefChantier" = "Pointage"."RefChantier" }, "Techniciens" WHERE "Pointage"."RefTechnicien" = "Techniciens"."RefTechnicien" GROUP BY "Techniciens"."Nom", "Pointage"."DatePointage", "Clients"."RefZone"
Apache OpenOffice 4.1.7 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
-
- Membre cOOnverti
- Messages : 344
- Inscription : 29 mai 2009 08:51
- Localisation : Guyane
Re: Somme conditionnelles dans une requête
Bsr/bjr,
la requète1 répond t-elle à ce que vous voulez?
@+
la requète1 répond t-elle à ce que vous voulez?
@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.14 et LO 7.3.7.2 sous OsX 10.13.6 High Sierra ; Windows 10 sous AOO 4.1.14 et LibO 7.3.7.2
-
- NOOuvel adepte
- Messages : 17
- Inscription : 28 janv. 2020 18:15
Re: Somme conditionnelles dans une requête
Bonjour HRk2o,
Ca correspond quasiment, j'ai modifié la requête 1 en groupant par mois sur "Paie-CalculZoneJour1"."DatePointage" et en supprimant le groupe sur la date seule, et j'obtiens mon analyse mensuelle (requête 2)!
Merci BEAUCOUP !
Passer par deux requêtes de calcul pour en faire cette troisième, j'aurais jamais trouvé ça tout seul.
Ca correspond quasiment, j'ai modifié la requête 1 en groupant par mois sur "Paie-CalculZoneJour1"."DatePointage" et en supprimant le groupe sur la date seule, et j'obtiens mon analyse mensuelle (requête 2)!
Merci BEAUCOUP !
Passer par deux requêtes de calcul pour en faire cette troisième, j'aurais jamais trouvé ça tout seul.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Apache OpenOffice 4.1.7 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10
et LibreOffice 6.4.2.2 sur Windows 10