Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
je veux transformer le premier tableau au deuxième. C'est à dire si temps_travail et du deuxième ligne = temps_travail et motif du 3eme ligne alors je les mets dans une seule ligne avec debut_occupation = min(debut_occupat) et fin_occupation.
Merci.
Il faut passer par un tableau simple.
Clic droit / Nouvelle objet de feuille / Zone table.
Ça t'enlèvera tous les doublons.
Il y a pas des doublons, je dois rajouter une condition pour chaque matricule. les motifs changent d'une période à autre si par exemple un agent a refait un contrat CDD et travaille toujours temps_t=100 alors dans la base il aura deux lignes une pour son premier cdd et autre pour son deuxième. Tant qu'il n'a pas changé son motif et temps travail je ne veux pas qu'il aura deux lignes je veux avoir une seule ligne qui contient :
MOTIF TEMPS_TRAVAIL DEBUT_ OCCUPATION FIN OCCUPATION
CDD 100 date debut occup de la 1ere ligne date fin occupation de la deuxième ligne
avec un tableau croisé dynamique dans ce cas, ça gère les regroupements.
Je pense que ma question n'est plus claire. Je n'ai pas besoin d'un affichage. Ce que je demande comment peut on fusionner deux lignes et calculer mon expression une seule fois tant que les dates sont successives.
voila exemple :
Donc pour Renouvellement TP Valeur de début occ : 01/12/2013 et fin occ 02/05/2015.
OK, j'y étais pas du tout
tu peux avoir plus de 2 lignes successives ?
oui justement.
Je dois aussi jouer sur le facteur année mois et jour parce que parfois tu trouves des lignes qui répondent aux conditions (meme motif, même temps travail) mais les jours mois et années de début_occ ne sont ni égaux ni successifs.
Par exemple
Matricule agent Motif Debut_occ
518 Renouvelement CDI 12/12/2005 13/08/2006
518 Renouvelement CDI 12/08/2007 13/08/2008
Il faut pas prendre l'année ou la période qui n’était pas en poste.
Dans un premier, je pense qu'il faut que tu identifies les renouvellements dans ton script avec un nouveau champ.
Je vais pas avoir le temps de t'expliquer plus ce soir. Je pense qu'il faut que tu créés 2 tables temporaires pour calculer les dates de fin d'occupation précédente et date de début d'occupation suivante. Voici un exemple simplifié :
// CALCUL DE LA DATE DE FIN D'OCCUPATION PRECEDENTE
DATE_FIN_OCCUPATION_PRECEDENTE :
NoConcatenate
LOAD *,
previous(DATE_FIN_OCC) as DATE_FIN_OCCUPATION
RESIDENT TA_TABLE
order by MATRICULE asc, DATE_DEBUT_OCC asc ;
// CALCUL DE LA DATE DE DEBUT D'OCCUPATION SUIVANTE
DATE_DEBUT_OCCUPATION_SUIVANTE:
NoConcatenate
LOAD
*,
previous(DATE_DEBUT_OCC) as DAT_DEB_OCCUPATION_SUIVANTE,
previous(MATRICULE) as MATRICULE_SUIVANT
RESIDENT TA_TABLE
order by MATRICULE desc, DATE_DEBUT_OCC desc ;
Ensuite je ferais un left join de ces 2 tables en un seule. Je droperais ces 2 tables pour ne conserver que la nouvelle table.
A partir de cette table je calculerais avec des IF() pour voir si il y a une succession d'occupation selon le motif. Si oui alors je mets une valeur à 0. Sinon 1.
Ensuite je ferais en sorte de ne garder que les dates que je veux par rapport à ce nouveau champ.
Il y a peut-être plus simple que cette méthode...
Je ne sais pas si l'intervalmatch pourrait t'aider dans ton cas...
try like this :
Not tested
source:
LOAD *,MATRIX&MOTIF as unique iNLINE
[
MATRIX,MOTIF,DEBUT_OCCUPATION ,FIN_OCCUPATION,TEMPS_TRAV
00876,partiel,03/05/2007,30/11/2007
00876,partiel,03/05/2007,30/11/2008
];
output:
load MATRIX,MOTIF,DEBUT_OCCUPATION,TEMPS_TRAV,if(Previous(unique)=unique,Previous(FIN_OCCUPATION)=FIN_OCCUPATION) as NEWFIN_OCCUPATION
resident source;
drop table source;