Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Union Clause and Group by clause
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
01141596
Message ID:
01141663
Vues:
17
It could be faster to do SUM() in the UNION also. This way you'll have less records in the first query result.

>
>i do this and that give me a good result ...
>
>*------------------------------------------------------------------------------
>  *-- 07/2006 On peut avoir 2 équipes de travail par jour par travailleur.
>  *-- chaque équipe de travail peut elle même avoir 2 types de sursalaire.
>  *-- Ex  Equipe IM1 ( infirmière Matin 1 ) peut avoir 7 ho à 100% et 1 Ho à 126%
>  *--     Equipe Fo  ( formation )  peut avoir 2 ho à 126% et 2 ho à 100%
>  *-- Un travailleur peut pouvoir réaliser 2 équipes de travail / jour.
>  *-- Le secrétariat social souhaite avoir un fichier où chaque ligne possède
>  *-- le nombre d'ho et un code corrspondant au type de sursalaire.
>  *-- Ex si l'équipe IM1 possède 7ho à 100 % et 1 Ho à 126% le 01/06/2006
>  *-- 0001234  		0000014   	20060601  	0017  				0700
>  *--	0001234  		0000014   	20060601  	0017  				0100
>  *-- Code societe	Code trav.	Date			Code sec.social	Heures prestées
>
>  *-- On doit donc filtrer les prestations par jour , type de sursalaire .
>  *-- Comme on peut avoir 4 types de sursalaire différent sur une journée
>  *-- on doit avoir une requête avec 4 clauses UNION.
>  *-- On groupera ensuite sur le type de sursalaire
>  *-- dans une seconde requête comme conseillé sur le NGFr.
>  SELECT E.cnosecretariat , ;
>    E.iid AS 'iemployeid' , ;
>    Horaire.ddate,;
>    PAUSE.iplanpauseid , ;
>    PAUSE.iid,;
>    Horaire.ntypesalaire AS 'sursalaire' ,;
>    Horaire.n100 AS 'totheure';
>    FROM AMLINE!PAUSE ;
>    INNER JOIN AMLINE!Horaire  	ON  PAUSE.iid = Horaire.cpauseid ;
>    INNER JOIN AMLINE!Employee E ON  E.iid = Horaire.iemployeeid;
>    WHERE Horaire.ddate BETW  D_debut AND  d_fin AND;
>    Horaire.n100 > 0.00 AND Horaire.ntypesalaire > TAUX_NULL;
>    UNION ;
>    SELECT E.cnosecretariat , ;
>    E.iid AS 'iemployeid' , ;
>    Horaire.ddate,;
>    PAUSE.iplanpauseid , ;
>    PAUSE.iid,;
>    Horaire.ntypesursalaire AS 'sursalaire' ,;
>    Horaire.n120  AS 'totheure';
>    FROM AMLINE!PAUSE ;
>    INNER JOIN AMLINE!Horaire  	ON  PAUSE.iid = Horaire.cpauseid ;
>    INNER JOIN AMLINE!Employee E ON  E.iid = Horaire.iemployeeid;
>    WHERE Horaire.ddate BETW  D_debut AND  d_fin AND;
>    Horaire.n120 > 0.00 AND Horaire.ntypesursalaire > TAUX_NULL;
>    UNION;
>    SELECT E.cnosecretariat , ;
>    E.iid AS 'iemployeid' , ;
>    Horaire.ddate,;
>    PAUSE.iplanpauseid , ;
>    PAUSE.iid,;
>    Horaire.ntypesalaire_2 AS 'sursalaire' ,;
>    Horaire.n100_2 AS 'totheure';
>    FROM AMLINE!PAUSE ;
>    INNER JOIN AMLINE!Horaire  	ON  PAUSE.iid = Horaire.cpauseid2 ;
>    INNER JOIN AMLINE!Employee E ON  E.iid = Horaire.iemployeeid;
>    WHERE Horaire.ddate BETW  D_debut AND  d_fin AND;
>    Horaire.n100_2 > 0.00 AND Horaire.ntypesalaire_2 > TAUX_NULL;
>    UNION;
>    SELECT E.cnosecretariat , ;
>    E.iid AS 'iemployeid' , ;
>    Horaire.ddate,;
>    PAUSE.iplanpauseid , ;
>    PAUSE.iid,;
>    Horaire.ntypesursalaire_2 AS 'sursalaire',;
>    Horaire.n120_2  AS 'totheure';
>    FROM AMLINE!PAUSE ;
>    INNER JOIN AMLINE!Horaire  	ON  PAUSE.iid = Horaire.cpauseid2 ;
>    INNER JOIN AMLINE!Employee E ON  E.iid = Horaire.iemployeeid;
>    WHERE Horaire.ddate BETW  D_debut AND  d_fin AND;
>    Horaire.n120_2 > 0.00 AND Horaire.ntypesursalaire_2 > TAUX_NULL;
>    INTO CURSOR temp
>
>
>  USE IN 0 Jf
>
>  SELECT DISTINCT * FROM Jf AS D WHERE  ;
>    D.djour BETWEEN  D_debut AND  d_fin INTO CURSOR DatesFiltred
>
>
>  SELECT PADL( ALLTRIM( cnosecretariat) ,7 , "0" ) AS 'cnosecretariat',;
>    iemployeid,;
>    temp.ddate,;
>    iplanpauseid,;
>    SurSalaire,;
>    SUM( totheure ) AS 'TotHo' ,;
>    MAX( Planpause.cnom ) AS 'cnomPlanpause',;
>    SPACE(7) AS cSdCode ,; && on calculera le code nécessaire au secrétariat ensuite.
>  MAX( IIF( ISNULL( D.djour ) , .F. , .T. )) AS 'jfOrWe',;
>    MAX( D.djour );
>    FROM temp ;
>    INNER JOIN Planpause	ON  temp.iplanpauseid = Planpause.iid ;
>    LEFT JOIN DatesFiltred D ON D.djour = temp.ddate ;
>    WHERE EMPTY( ALLTRIM(cnosecretariat ) ) =.F.;
>    GROUP BY 1,2,3,4,5 READWRITE INTO CURSOR cursorfinal
>
>
>
>
>
>
--sb--
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform