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 Server 2000] Gestion de champs non renseignés dans ma requête


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut [SQL Server 2000] Gestion de champs non renseignés dans ma requête
    Bonsoir à tous

    voici description de ma table .


    CREATE TABLE [BULLETIN] (
    [MATRICULE_ELEV] [char] (8) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CODE_TRIM] [numeric](18, 0) NOT NULL ,
    [CODE_ANNEE] [numeric](18, 0) NOT NULL ,
    [CODE_MAT] [numeric](18, 0) NOT NULL ,
    [NUM_CLASSE] [char] (8) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [MOYE_CLASSE] [real] NULL ,
    [NOTE_COMPO] [real] NULL ,
    [MOYE_GLE] [real] NULL ,
    [COEFI] [numeric](18, 0) NULL ,
    [MOY_GLE_COEFI] [real] NULL ,
    [MOYE_ELEV] [real] NULL ,
    [DISPENSE] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    CONSTRAINT [PK_BULLETIN] PRIMARY KEY NONCLUSTERED
    (
    [MATRICULE_ELEV],
    [CODE_TRIM],
    [CODE_ANNEE],
    [CODE_MAT],
    [NUM_CLASSE]
    ) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

    [QUOTE]
    mon problème est lequel ? quand j'edite le(s) bulletins d'une classe donnée je n'arrive pas à mettre du vide ou à défaut un caractère quelconque devant une matière par exple ''education physique'' si la l'élève en question est dispensé. je précise que le champ dispense prend un 'N' non dispensé ou 'O' pour dispensé. c à d mettre du vide ou caractère quelquoncque devant
    (MOYE_GLE) ; (COEFI);

    voici ma requête :

    [
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select *
    from bulletin B,eleve E,classe C,trimestre T,annee A,matiere Ma,jour J,mois M,anne An,moyen_elev_trim MT,ABSENCE_COURS_TRIMESTRE ab2  
    where B.matricule_elev=E.matricule_elev and B.num_classe=C.num_classe and B.matricule_elev=MT.matricule_elev
    and B.Code_trim=T.code_trimes and B.code_annee=A.code_annee and E.AN_INSCRIP=A.code_annee and  B.code_annee=MT.code_annee and E.an_inscrip=MT.code_annee
    and B.code_mat=Ma.code_mat  and B.matricule_elev=ab2.matricule_elev and B.code_trim=ab2.code_trimestre and b.code_annee=ab2.code_annee
    and B.num_classe=ab2.code_classe and c.num_classe=ab2.CODE_CLASSE and a.code_annee=ab2.code_annee and T.code_trimes=ab2.code_trimestre
    and mt.code_annee=ab2.code_annee and mt.code_trim=ab2.code_trimestre and mt.num_classe=ab2.code_classe
    and B.moye_gle is not null
    and E.joour_nai=J.code_jour and E.mois_nais=M.code_mois  and E.anne_nais=An.code_an
    and  B.num_classe=:classe
    and  B.code_trim=:trim
    and  B.code_annee=:annee
    order by B.matricule_elev,Ma.code_mat
    ]

    merci à tous pour l'aide
    vive le forum

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    mon problème est lequel ? quand j'edite le(s) bulletins d'une classe donnée je n'arrive pas à mettre du vide ou à défaut un caractère quelconque devant ...
    J'ai rien compris à ce que tu veux faire...il ya quoi par défaut dans ta table quand tu veux afficher du vide? regarde peut etre du coté de IF


    bon courage

    Michel

    PS : le descriptif des tables est particulierement pénible à lire...

  3. #3
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut requete qui ne fait pas le choix
    OK je met un peu d'ordre dans ma requete __ j'utilise SQL 2000-

    en fait par defaut il ya 'O' dans le champ dispense de la table Bulletin.
    quand il rencontre le 'O' il affiche du vide.devant la matière en question.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    select *
    from bulletin B,eleve E,classe C,trimestre T,annee A,matiere Ma,jour J,mois M,anne An,moyen_elev_trim MT,ABSENCE_COURS_TRIMESTRE ab2  
    where B.matricule_elev=E.matricule_elev 
         and B.num_classe=C.num_classe  
         and B.matricule_elev=MT.matricule_elev
         and B.Code_trim=T.code_trimes
         and B.code_annee=A.code_annee 
         and E.AN_INSCRIP=A.code_annee 
         and  B.code_annee=MT.code_annee 
         and E.an_inscrip=MT.code_annee
         and B.code_mat=Ma.code_mat  
         and B.matricule_elev=ab2.matricule_elev 
         and B.code_trim=ab2.code_trimestre 
         and b.code_annee=ab2.code_annee
         and B.num_classe=ab2.code_classe 
         and c.num_classe=ab2.CODE_CLASSE 
         and a.code_annee=ab2.code_annee 
         and T.code_trimes=ab2.code_trimestre
        and mt.code_annee=ab2.code_annee 
        and mt.code_trim=ab2.code_trimestre 
        and mt.num_classe=ab2.code_classe
        and B.moye_gle is not null
        and E.joour_nai=J.code_jour
        and E.mois_nais=M.code_mois  
        and E.anne_nais=An.code_an
       and  B.num_classe=:classe
        and  B.code_trim=:trim
        and  B.code_annee=:annee
    order by B.matricule_elev,Ma.code_mat
    merci d'avance

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Si tu utilisais des jointures normalisées (INNER JOIN), ta requête serait certainement plus lisible...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut
    bonjour

    en fait j'ai repensé mes tables pour me faire comprendre d'avantage et être aider: j'utilise sql 2000

    [
    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
    U]Bulletin[/U]:
     MATRICULE_ELEV	char	8	0
     CODE_TRIM	numeric	9	0
    CODE_ANNEE	numeric	9	0
    CODE_MAT	numeric	9	0
    NUM_CLASSE	char	8	0
    MOYE_CLASSE	real	4	1
    NOTE_COMPO	real	4	1
    MOYE_GLE	real	4	1
    COEFI	numeric	9	1
    MOY_GLE_COEFI	real	4	1
    MOYE_ELEV	real	4	1
    DISPENSE	char	1	1
    clé : matricule_elev
     
    eleve                              matiere
    num_ligne                                    code_matiere
    matricule_elev                               libelle_matière
    nom_eleve                                    clé : code_matière
    prenom_elev
    clé num_ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    la table bulletin  contenu:
    matricule_elev ;codetrim; code_mat ; num_classe; moye_gle; coefi ; dispense
    e0001              02            08              04                12        2          O
    e0002              02            01              04                 10       3          N
    etc....
    je voudrais que lorsque il trouve dans le champ 'dispense'de la table bulletin =un 'O' qui veut dire eleve dispensé pour cette matière ; que sur l'etat de sorti il mette du vide devant le champ 'moye_gle' et devant le champ 'coefi'
    je souffre actuellement avec ma requête : quelle fonction puis je utilisée pour parvenir à mon but ! un exemple serait le bienvenue.
    voici ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select *
    from bulletin B,eleve E, matiere Ma
    where B.matricule_elev=E.matricule_elev 
            and B.Code_mat=Ma.code_mat
            and B.dispense ='O' 
    order by B.matricule_elev,Ma.code_mat
    merci pour votre aide

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Si j'ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select E.nom_eleve, M.libelle_matière,
    case B.dispense when 'O'  then null else MOYE_GLE end,
    case B.dispense when 'O'  then null else COEFI end,
    from eleve E 
    left outer join bulletin B
    on E.matricule_elev = B.matricule_elev
    and B.dispense <> 'O' 
    inner join  matiere Ma
    on B.Code_mat = Ma.code_mat
    order by B.matricule_elev,Ma.code_mat

  7. #7
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut requete qui ne fait pas lechoix
    bonjour
    jutilse SQL 2000

    j'ai essaye la requete mais toujours ca marche pas il affiche l'erreur suivante
    ' syntaxe incorrecte vers le cle 'case' '

    j'ai aussi utilisé le if toujours la meme erreur

    j'avous que je n'ai jamais utilé les if ou case dans une requete


    merci d'avance

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Points : 166
    Points
    166
    Par défaut
    Salut,

    Je corrige mon code, mais çà ne correspond pas à l'erreur que tu indique, donc à voir...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select E.nom_eleve, M.libelle_matière,
    case B.dispense when 'O'  then null else MOYE_GLE end,
    case B.dispense when 'O'  then null else COEFI end
    from eleve E 
    left outer join bulletin B
    on E.matricule_elev = B.matricule_elev
    and B.dispense <> 'O' 
    inner join  matiere Ma
    on B.Code_mat = Ma.code_mat
    order by B.matricule_elev,Ma.code_mat
    J'ai juste supprimé la virgule après "end" dans le deuxième "case"

  9. #9
    Membre actif Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    le problème vient du CASE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select E.nom_eleve, M.libelle_matière,
    case when B.dispense = 'O'  then null else MOYE_GLE end,
    case when B.dispense = 'O'  then null else COEFI end
    from eleve E 
    left outer join bulletin B
    on E.matricule_elev = B.matricule_elev
    and B.dispense <> 'O' 
    inner join  matiere Ma
    on B.Code_mat = Ma.code_mat
    order by B.matricule_elev,Ma.code_mat

  10. #10
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut gestion de champ non renseigne dans ma requete
    enfin ma requete marche : vraiment un ouf . une question :

    comment arriver à mettre un caractère quelconque : ' ' ou '*' ou '-' etc .. à la place du champ 'moye_gle' et à la place du champ 'coefi' ? c'est à dire que si la condition est verifiée (dispense ='O' au lieu de mettre le chiffre '0' (zero) il ne doit rien mettre.
    je note que le champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    moye_gle est de type real;
    et coefi est de type  numeric
    exple 
    nom : bineta
    classe 3e
    matiere : education physique
    moye_gle : '*' ou '-'   ou etc ... ( ou carrement ne rien ecrire)
    coefi :      '* '   ou '-'   ou etc ... ( ou carrement ne rien ecrire)
     
    en fait c'est comment  faire la coversion
    je bouquine mais ma petite tête se bloque
    merci pour votre aide SVP

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/02/2009, 12h26
  2. [SQL SERVER 2000] Base de donnée non relationnelle
    Par Phenomenium dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 31/03/2008, 10h39
  3. [sql server 2000] existence d’un champ
    Par akrem dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 01/05/2007, 13h18
  4. Réponses: 9
    Dernier message: 20/03/2007, 19h56
  5. [SQL Server 2000]Utiliser un Champs calculé pour en calculé un autre.
    Par PadawanDuDelphi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/03/2007, 10h05

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