Probleme requete

Résolu
mathvez Messages postés 42 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 15 février 2008 - 21 janv. 2008 à 17:32
mathvez Messages postés 42 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 15 février 2008 - 22 janv. 2008 à 20:32
Bonjour j'ai une requete SQL:

SELECT Emp_Code, Srv_Code, Sec_Code, Zon_Code, Emp_UserID,
Max(datediff(day,isnull(Date_Debut,'2007-01-01'),isnull(Date_Fin,'2007-03-31'))) as NbJour, Sit_Type
FROM
(SELECT Vue_Employe_Prog_Reconnaissance.Emp_Code, Vue_Employe_Situation.Srv_Code, Vue_Employe_Situation.Sec_Code,
Vue_Employe_Situation.Zon_Code,
case when Vue_Employe_Situation.Sit_Date_Debut < '2007-01-01' or Vue_Employe_Situation.Sit_Date_Debut is null then '2007-01-01' else Vue_Employe_Situation.Sit_Date_Debut  
end as Date_Debut,
case when Vue_Employe_Situation.Sit_Date_Fin > '2007-03-31' or Vue_Employe_Situation.Sit_Date_Fin is null then '2007-03-31' else Vue_Employe_Situation.Sit_Date_Fin
end as Date_Fin ,
Vue_Employe_Prog_Reconnaissance.Emp_UserID, Vue_Employe_Situation.Sit_Type


FROM Vue_Employe_Situation INNER JOIN Vue_Employe_Prog_Reconnaissance ON Vue_Employe_Situation.Emp_Code=Vue_Employe_Prog_Reconnaissance.Emp_Code
WHERE (Vue_Employe_Situation.Sit_Date_Debut <= '2007-01-01' and Vue_Employe_Situation.Sit_Date_Fin >= '2007-01-01'
and Vue_Employe_Situation.Sit_Date_Fin <= '2007-03-31') or (Vue_Employe_Situation.Sit_Date_Debut >= '2007-01-01' and Vue_Employe_Situation.Sit_Date_Fin <= '2007-03-31') or (Vue_Employe_Situation.Sit_Date_Debut >= '2007-01-01' and Vue_Employe_Situation.Sit_Date_Debut <= '2007-03-31' and Vue_Employe_Situation.Sit_Date_Fin >= '2007-03-31') or (Vue_Employe_Situation.Sit_Date_Debut <= '2007-01-01' and Vue_Employe_Situation.Sit_Date_Fin >= '2007-03-31') or (Vue_Employe_Situation.Sit_Date_Debut <= '2007-03-31' and isnull(Vue_Employe_Situation.Sit_Date_Fin, getdate()) >= '2007-03-31')
) STOT
Group by Emp_Code, Srv_Code, Sec_Code, Zon_Code, Emp_userid, Sit_Type

qui me retourne
code       service   secteur     zone              user               NbJour           situation
666092     14         130        1182        BEAULIEU           47                   T
666092     17         102        1090        BEAULIEU           65                   R
669384     12         102        1012        BELZILEFR          39                   R
669384     14         112        1112        BELZILEFR          72                   R

Je voudrais savoir ce que je dois rajouter pour faire sortir seulement 1 enregistrement par user selon les 2 conditions suivante:
-si la situation est temporaire (T) et + que 45 jour alors tu utilise cet enregistrement
-sinon tu utilise l'enregistrement qui a le plus de jour de fais

Merci de votre aide elle sera beaucoup apprécié

3 réponses

mathvez Messages postés 42 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 15 février 2008
22 janv. 2008 à 20:32
Finalement pour atteindre mon but, jai utilisé la même requête mais jai utilisé le code de l'application pour ignorer certains enregistrements en fonction des 2 conditions suivantes:
-si la situation est temporaire (T) et + que 45 jour alors tu utilise cet enregistrement
-sinon tu utilise l'enregistrement qui a le plus de jour de fais

Si jamais quelqu'un trouve la solution pour ajouter ces conditions à la requête SQL, svp me faire parvenir la solution. Mon système deviendrais beaucoup plus performant.

Merci
3
KenZara Messages postés 112 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 20 décembre 2011
22 janv. 2008 à 13:16
    Bonjour,

Il me semble que tu ne peux pas faire une requête avec des "if" il faudra dans ce cas, faire une procédure stockée .. Dans quelle type de base de données travailles tu ?

Kenza
0
mathvez Messages postés 42 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 15 février 2008
22 janv. 2008 à 14:27
Je travaille avec une petite base de donnée acces ( un projet de bilan médical ) , j'utilise cette requete avec les 3 lignes de code suivant ( codé en VBA (macro) ) .

Dim bdAccidents as ADODB.Recordset
Set bdAccidents = new ADODB.Recordset
bdAccidents.Open "Requete SQL", CurrentProject.Connection, adOpenKeyset, adLockOptimistic


ensuite je traite mes infos avec


While Not (bdAccidents.EOF) ' Pour chacun des enregistrements


'Code a traiter


bdAccidents.MoveNext


Wend

Pour simplifier la requête:

SELECT Emp_Code, Srv_Code, Sec_Code, Zon_Code, Emp_UserID,
Max(datediff(day,isnull(Date_Debut,'2007-01-01'),isnull(Date_Fin,'2007-03-31'))) as NbJour, Sit_Type
FROM ( ****Requete select****) GTotal
Group by Emp_Code, Srv_Code, Sec_Code, Zon_Code, Emp_UserID, Sit_Type

qui me retourne
code       service   secteur     zone              user               NbJour           situation
666092     14         130        1182        BEAULIEU           47                   T
666092     17         102        1090        BEAULIEU           65                   R
669384     12         102        1012        BELZILEFR          39                   R
669384     14         112        1112        BELZILEFR          72                   R

Je voudrais savoir ce que je dois rajouter pour faire sortir seulement 1 enregistrement par user selon les 2 conditions suivante:
-si la situation est temporaire (T) et + que 45 jour alors tu utilise cet enregistrement
-sinon tu utilise l'enregistrement qui a le plus de jour de fais

Merci de votre aide elle sera beaucoup apprécié
0
Rejoignez-nous