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

MS SQL Server Discussion :

Aide sur création requete


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut Aide sur création requete
    Bonjour à tous,

    Je ne suis pas un expert sur SQL et je bloque sur la réalisation d'une requête sous SQL Server.
    Voici ma table :

    OF Phase Operation Etat Select
    LCT01 010 Soudure Terminé
    LCT01 020 Peinture *
    LCT01 030 Montage
    LCT02 010 Soudure *
    LCT02 020 Peinture
    LCT03 010 Peinture Terminé
    LCT03 020 Montage *

    En fait, j'aimerai pouvoir lister la prochaine opération à réaliser pour chaque OF.

    Résultat
    LCT01 020 Peinture
    LCT02 010 Soudure
    LCT03 020 Montage

    Pouvez- vous m'aider dans la réalisation de cette requête ?

    Merci par avance

    Cdlt

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous n'avez pas définit comment on connait la prochaine opération. On va supposer qu'il s'agit de celle ayant le * dans la colonne Etat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT OF, Phase, Operation
    FROM LaTable
    WHERE Etat = '*'
    Notez au passage que votre modélisation semble incorrecte, et que la colonne Phase devrait être dans une table séparée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Merci de votre réponse, par contre je viens de me rendre compte que l'affichage de la table n'est pas bon. En fait le caractère * correspond au enregistrement que je souhaite sélectionner. Cette information n'est pas stockée dans la table.
    C'est la phase qui permet d'ordonner les opérations et donc de connaitre la prochaine opération à réaliser.
    Le principe serait, pour chaque OF, de retrouver les opérations qui ne sont pas terminées et ensuite de récupérer la première opération (phase minimum).

    Du coup, ça complique un peu plus la requête et je n'y arrive pas.


    Je ne comprends pas pourquoi ma modélisation est incorrect avec la colonne phase?

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Alors comme ceci :

    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
     
    WITH CTE AS (
        SELECT 
            OF
            , Phase
            , Operation
            ,ROW_NUMBER() OVER(PARTITION BY OF ORDER BY Phase) AS Rn
    FROM LaTable
    )
    SELECT
            OF
            , Phase
            , Operation
    FROM CTE
    WHERE Rn = 1
    Pour votre modélisation, vous devriez avoir une table contenant les opérations(id, libelle, ...), et ne garder que la clef étrangère dans votre table
    Je dirais de même pour la colonne Etat

    Mais il faudrait en savoir un peu plus pour être plus précis.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Je suis en SQL 2000, la fonction 'ROW_NUMBER' n'est pas un nom de fonction reconnu.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    En effet,

    Alors il faudra passer par une sous requete et un NOT EXISTS, afin de trouver les lignes pour lesquelles il n'y a pas d'autre ligne ayant le même OF, un statut vide (?) et une phase inférieure.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Auriez-vous un exemple à me proposer parce que, là, je ne vois pas comment écrire la requête ?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Finalement j'ai trouvé la solution avec les pistes que vous m'avez transmis.

    La voici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT lct
          ,phase
          ,operation
          ,etat
      FROM MaTable as A where A.Phase=(SELECT min(B.Phase) FROM MaTable as B where B.Lct=A.Lct AND B.etat<>'Terminé')
    Merci de votre aide.

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

Discussions similaires

  1. Aide sur création de requete arborescente
    Par in dans le forum Oracle
    Réponses: 3
    Dernier message: 26/01/2007, 14h29
  2. [MySQL] aide sur une requete
    Par dj-julio dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/01/2006, 14h25
  3. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  4. aide sur création d'un composant
    Par laetus dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/07/2004, 10h45
  5. Aide sur une requete de sélection
    Par stephdiplo150 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/01/2004, 10h40

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