Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2011, 12h31   #1
Membre actif
 
Avatar de Issam
 
Inscription : mars 2002
Messages : 347
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : mars 2002
Messages : 347
Points : 177
Points : 177
Envoyer un message via Skype™ à Issam
Par défaut Compter le nombre d'absences dans une requête SQL

bonjour
supposons que j'ai cette table de pointage

Code :
1
2
3
4
5
6
7
 
CREATE TABLE POINTAGE (
    ID_POINTAGE    INTEGER NOT NULL,
    PO_ID_SALARIE  INTEGER, /* clé étrangère */
    PO_ENTREE      TIMESTAMP,
    PO_SORTIE      TIMESTAMP
);
et la table salariés
Code :
1
2
3
4
5
CREATE TABLE SALARIES (
    ID_SALARIE            INTEGER NOT NULL,
    SAL_NOM               VARCHAR(100),
    SAL_PRENOM            VARCHAR(100)
)
je compte le nombre de jours travaillé pour chaque salarié j'utilise cette requette
Code :
1
2
3
4
5
6
7
8
SELECT po.po_id_salarie, sal.sal_nom, sal.sal_prenom, count(DISTINCT (cast (po_entree AS date))) FROM pointage po
JOIN salaries sal ON po.po_id_salarie= sal.id_salarie
 
 
 
WHERE cast(po_entree AS date) BETWEEN :d1 AND :d2
AND NOT po_sortie IS NULL
GROUP BY 1,2,3
maintnant est t'il possible de compter le nombre d'absences dans cette même requette ?

merci et bonne journée !
Issam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 12h48   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
2 pistes possibles

une avec les jointures externes, l'autre avec NOT EXISTS
Code :
1
2
3
4
5
6
SELECT Sal.ID_SALARIE,
       Sal.Sal_nom,
       Sal.Sal_prenom,
  FROM Pointage Po
    RIGHT JOIN Salaries Sal ON Po.Po_id_salarie = Sal.Id_salarie
WHERE Po.Po_id_salarie IS NULL
dehorter olivier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 13h04   #3
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 643
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 643
Points : 2 639
Points : 2 639
Ca me semble difficile si vous n'avez pas de table de planning
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 14h19   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Code :
count(DISTINCT (cast (po_entree AS date)))
Quel est l'intérêt de caster une colonne en date juste pour la compter ?

Sinon effectivement il va falloir gérer un calendrier.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 14h50   #5
Membre actif
 
Avatar de Issam
 
Inscription : mars 2002
Messages : 347
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : mars 2002
Messages : 347
Points : 177
Points : 177
Envoyer un message via Skype™ à Issam
Citation:
Envoyé par CinePhil Voir le message
Code :
count(DISTINCT (cast (po_entree AS date)))
Quel est l'intérêt de caster une colonne en date juste pour la compter ?
parceque le salarié peut pointer plusieurs fois dans la journée et PO_ENTREE est de type Timestamp

sinon merci pour vos propositions, je vais essayer de réfléchir maintenant plus sérieusement
Issam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 16h32   #6
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Citation:
Envoyé par dehorter olivier Voir le message
2 pistes possibles

une avec les jointures externes, l'autre avec NOT EXISTS
Code :
1
2
3
4
5
6
SELECT Sal.ID_SALARIE,
       Sal.Sal_nom,
       Sal.Sal_prenom,
  FROM Pointage Po
    RIGHT JOIN Salaries Sal ON Po.Po_id_salarie = Sal.Id_salarie
WHERE Po.Po_id_salarie IS NULL
Là on est plutôt en train de chercher les salariés qui n'ont jamais pointé, pas les jours d'absence.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 16h55   #7
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
certes oui mais isam ne parlait que 2 tables; aussi la recommandation de punkoff d'avoir une table planning est judicieuse (mais cela ne gère pas les personnes présentes mais qui ne pointent pas, ou mal)
dehorter olivier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h49.


 
 
 
 
Partenaires

Hébergement Web