IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[SQL] Probleme(s) requête


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Août 2006
    Messages : 307
    Par défaut [SQL] Probleme(s) requête
    Salut a tous,

    J'ai quelques soucis avec une requete SQL. Je travaille sur une base SQL Server.

    VOici en fait la requête que j'ai ecrit,
    T_PLN_JOUR_PJR étant la table CALENDRIER principal (je me suis basé sur le script de creation de SQLPro)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT DISTINCT 
       tbl_ms_set_steps.MS_PROJ_START , 
       PAN_ID , 
       PMS_ID , 
       tbl_ms_set_steps.MS_PROJ_END , 
       est_time,
       datediff(month,tbl_ms_set_steps.MS_PROJ_START,tbl_ms_set_steps.MS_PROJ_END) AS 'Duree_en_mois',
       cast(tbl_ms_set_steps.est_time/datediff(month,tbl_ms_set_steps.MS_PROJ_START,tbl_ms_set_steps.MS_PROJ_END)  as decimal AS 'Resultat' 
    FROM   
       CRM_1.dbo.tbl_ms_set_steps tbl_ms_set_steps
    INNER JOIN T_PLN_JOUR_PJR PJR
       ON PJR.PJR_DATE BETWEEN tbl_ms_set_steps.MS_PROJ_START AND tbl_ms_set_steps.MS_PROJ_END
     
    WHERE 
       (datediff(month,MS_PROJ_START,MS_PROJ_END)<>0)
    AND 
       (est_time<>0)
    ORDER BY
       MS_PROJ_START, Resultat, PAN_ID, PMS_ID
    Et voici une ligne de valeur de tbl_ms_set_steps :
    MS_PROJ_START : 2003-06-29 00:00:00
    MS_PROJ_END : 2003-12-29 00:00:00
    est_times : 50
    Duree_en_mois est la difference entre les 2 dates...
    Resultat est egale a Est_times/Duree_en_mois


    Et voici le resultat de ma requête :



    J'ai 1 petite question :
    [I]1. La duree en mois est de 6 (pour cette ligne). Or la requete me genere (logiquement) 7 lignes. Comment est ce que je pourrais eviter cela ?


    Merci d'avance pour vos conseils...

    MArio

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 042
    Billets dans le blog
    6
    Par défaut
    Rajoutez une critère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PAN_ID >= YEAR(MadateDebut)  AND PMS_ID > MONTH(MadateDebut)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Août 2006
    Messages : 307
    Par défaut
    Ca m'a l'air de fonctionner (je vais tout de meme verifier si c'est bien OK partout) mais pour ne pas mourir con , j'aurais juste voulu qques explications d'un veritable PRO SQL sur cette solution.

    Si tu as le temps, bien sur...
    Sinon, c'est pas grave. Je mettrais "resolu" en fin de journee.

    En tout cas, un grand MERCI a toi.

  4. #4
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Août 2006
    Messages : 307
    Par défaut
    En fait, il y a quand meme un GROS probleme...

    Si jai :
    MS_PROJ_START : 2003-06-29 00:00:00
    MS_PROJ_END : 2004-12-29 00:00:00
    est_times : 50
    Le resultat de la requete est tout de meme faux et j'obtiendrais uniquement les ligne ou PAN_ID = 2003..

  5. #5
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Août 2006
    Messages : 307
    Par défaut
    Je crois que la solution serait de faire plusieurs UNION de maniere à traiter toutes les periodes...

    Pour cela, un bon esprit de deduction (aie aie, c'est pas mon fort).
    Si vous avez des dons, je veux bien en prendre connaissance ...
    JE continue a reflechir de mon côté...

  6. #6
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Août 2006
    Messages : 307
    Par défaut
    Voici plus ou moins la solution a mon probleme...
    J'espere ne rien avoir oublier...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT [...]
    FROM [...]
    WHERE year(MS_PROJ_START) <> year(MS_PROJ_END) 
    and   PAN_ID =  year(MS_PROJ_END)  
    AND [...]
     
    UNION
     
    SELECT [...]
    FROM [...]
    WHERE year(MS_PROJ_START) = year(MS_PROJ_END)  
    AND PJR.PMS_ID> month(MS_PROJ_START) 
    AND [...]
     
    UNION
     
    SELECT [...]
    FROM [...]
    WHERE year(MS_PROJ_START) <> year(MS_PROJ_END) 
    and   PAN_ID =  year(MS_PROJ_START) AND PJR.PMS_ID> month(MS_PROJ_START)  
    AND [...]
    MERCI POUR VOTRE AIDE !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL-SERVER] Déconnecter user d'une BD probleme de requête
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/06/2006, 08h19
  2. [SQL] Probleme de TOP dans une requête
    Par boutts dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/05/2006, 10h49
  3. [MySQL] php probleme de requête sql
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 03/04/2006, 23h52
  4. [SQL] probleme de requête
    Par Le Rebel dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 15/02/2006, 11h52
  5. Probleme de requête SQL
    Par breizhoo dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/08/2005, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo