begin process at 2010 03 17 22:29:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Requêtes

 > 

Probleme requete


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme requete

lundi 21 janvier 2008 à 17:32:47 | Probleme requete

mathvez

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é

mardi 22 janvier 2008 à 13:16:03 | Re : Probleme requete

KenZara

    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
mardi 22 janvier 2008 à 14:27:39 | Re : Probleme requete

mathvez

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é

mardi 22 janvier 2008 à 20:32:56 | Re : Probleme requete

mathvez

Réponse acceptée !
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


Cette discussion est classée dans : date, code, employe, vue, situation


Répondre à ce message

Sujets en rapport avec ce message

un gran pb de redondance [ par mehdi911 ] Mehdi j ai table assid_emp code : code assid matricule :emp date_assid : date d absence Probleme de requete Date [ par Neocarter ] Bonjour a tous,J'ai actuellement un petit probleme dans une de mes requetes SQL. En effet, a chaque demarrage, j'ai l'erreur "Fonction 'Date' non defi Requête FTS sur vue. [ par gillou1664 ] Bonjour tout le monde.Bon, je suis pas très bon en SQL et j'ai un petit soucis (enfin gros :p) : J'essaie d'utiliser une fonction de recherche de text optimisation requete sous sql server 7 [ par lulu1537 ] Bonjour, j'ai une table ainsi crée sous Sql server 7tblCUMULS_ELEMENTS(    DATE_VENTE  date,     CODE_ELEMENT varchar(13),     CODE_RAYON varchar(10), probleme oracle [ par celeste87 ] Slt à tous j'ai un probleme avec mon package MAJ_SALARIES(qui permet de mettre à jour la table salarié et pour un salarié si j'insere un enfant je met manipulation des dates [ par sparo83 ] Bonsoir à vous, je travail sous oracle 10g en manioulant les entrepots de données et mon probleme est le suivant : j'ai une vue matérialisée 'temps' Sélectionné uniquement la date de demain [ par vincej ] Bonjour, Je cherche a récupérer uniquement les enregistrements qui date de demain. voila comment j'ai précédé : [code=php]$itomorrow = time () + 86 ORDER BY SPECIFIQUE [ par arnaudmuse ] Bonjour je suis a la recherche d'un code pour pouvoir faire un order by specifique, je m'explique. Disons que je récupère par le biais d'une requette sqlserver datetime [ par koukou09 ] Salut, je veux faire une insertion des données dans sqlserver à partir d'un frame dans parmi les composant une date qui est définit comme type date Calcul conditionnel dans un état [ par SElKettani ] Bonsoir Access : J'ai à effectuer un calcul conditionnel : Dans un formulaire j'ai une zone de liste qui m'affiche la liste des personnes consultées


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,250 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales