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 :

Select avancé avec MS SQL Server


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Par défaut Select avancé avec MS SQL Server
    Bonjour tout le monde, j'ai une table qui ressemble un peu a ça :

    Année | Mois | Nombre d'accident
    2010 Aout 5
    2010 Avril 4
    2010 Novembre 8

    Mois je veux faire un Select sur cette table, de tel sorte a ce qu'il me renvoie le résultat comme ça:

    Année | Mois | Nombre d'accident
    2010 Aout 5
    2010 Avril 4
    2010 Décembre 0
    2010 février 0
    2010 Janvier 0
    2010 juillet 0
    2010 juin 0
    2010 Mars 0
    2010 Mai 0
    2010 Novembre 8
    2010 Octobre 0
    2010 Septembre 0

    donc je veux Avoir les 12 mois dans le résultat de la requête même s'il n'existent pas, ces 12 mois, tous sur la table et puis mettre zéro dans la valeur du nombre d'accident.

    si qlq1 peut me donner un coup de main SVP, Merci bien

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Vous pouvez créer une table des mois et des années, puis faire un produit cartésien entre les deux et enfin une jointure externe vers votre table d'accidents.

    Il serait préférable que cette dernière soit normalisée et fasse référence à la table mois plutôt qu'y stocker le libellée des mois.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Par défaut
    j'avais déjà penser a créer des table et tout, mais le souci, c'est que j'ai pas la main pour pouvoir ajouter ou modifier ou créer des tables au niveau de la base de données.

    c'est pour ça que j'aimerai savoir s'il y a une requête "SELECT ..." qui me permet d'avoir ce genre de résultat.

    Merci quand mm pour ta réponse.

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Billets dans le blog
    1
    Par défaut
    Bonjour ,

    tu peux passer par des tables sous-jacentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select A.a ,M.m ,T.n
    from Ta_table T
        ,(select "janvier" union all
          select "fevrier"  ... 
         )as M(m)
        ,(select 2010 union all
          select 2011 ...
         )as A(a)
    where T.m =* M.m 
    and   T.a =* A.a

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Par défaut
    je n'ai pas bien compris ce concept, mais pour ajouter, j'ai d'autres champs que je dois sélectionner que l'année et le mois et le nombre d'accidents, et bien évidement, les valeurs des années et tout ne sont pas mentionnées au niveau de la requête.

    par exemple je fais :

    Select ...année, mois, nbr_accident...
    from ....
    Group by ...,année, mois...

    voilà

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Billets dans le blog
    1
    Par défaut
    Cela te permet de creer une table juste pour la requete,
    dans mon exemple j'ai créé les table A (a) et M(m) .
    Apres tu fais ce que tu veux avec, et en particulier ce a quoi tu pensais si tu avais pu creer des vrais tables.

    Tu peux mettre A.a et M.m partout : dans le select, le where , un group by , un order by ...

    NB : dans l'exemple il te faut isnull(T.n, 0 ) evidemment

    PS : si select ... from ( select ... ) ... ne passe pas, j'ai deja vu des post avec WITH sur ce forum.

Discussions similaires

  1. Problème Connection Jbuilder avec MS SQL Server 2000
    Par kchami77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/02/2006, 23h29
  2. Rafraichissement des données avec ADOConnection -SQL Server
    Par newfsch dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/01/2006, 21h48
  3. probelem avec instance SQL server 2000
    Par timsah dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 20/12/2005, 12h13
  4. Algo de selection d'une frequence (sql server)
    Par edmotets dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 23/11/2005, 16h26
  5. INSUFFICIENT MEMORY avec MS SQL SERVER 7
    Par AODRENN dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/10/2005, 16h53

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