mathvez
Messages postés42Date d'inscriptionvendredi 5 janvier 2007StatutMembreDernière intervention15 février 2008
-
21 janv. 2008 à 17:32
mathvez
Messages postés42Date d'inscriptionvendredi 5 janvier 2007StatutMembreDernière intervention15 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
mathvez
Messages postés42Date d'inscriptionvendredi 5 janvier 2007StatutMembreDernière intervention15 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.
KenZara
Messages postés112Date d'inscriptionvendredi 24 décembre 2004StatutMembreDernière intervention20 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 ?
mathvez
Messages postés42Date d'inscriptionvendredi 5 janvier 2007StatutMembreDernière intervention15 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