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 :

Auto-jointure sur une même table


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 23
    Par défaut Auto-jointure sur une même table
    Bonjour,

    J'ai une table qui contient des versions

    Table1

    ID -------- version
    1 -------- 1.1.4.3
    2 -------- 0.265.0.3
    3 -------- 1.2.65.0
    4 -------- 0.265.0.777
    5 -------- 1.1.4.999


    Le champ Version est un VARCHAR

    Pour extraire les 3 premiers chiffres de la version: voici en SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SUBSTRING(Version ,
                      0, 
    		  LEN(Version ) - 
    		  CHARINDEX('.', REVERSE(Version )) + 1)
    
    Je cherche à obtenir le nombre de verions identique à 3 chiffres dans la Table1


    version(3 chiffres) ------------- Nombre de fois dans la table
    1.1.4 ----------------------------> 2
    0.265.0 ----------------------------> 2
    1.2.65 ----------------------------> 1

    Merci de votre aide

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut
    je crée une colonne calculée qui simplifie le travail.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER TABLE VERSION ADD NUMERO_SIMPLIFIE AS SUBSTRING(Numero_Version,
                      0, 
              LEN(Numero_Version) - 
              CHARINDEX('.', REVERSE(Numero_Version)) + 1)
    la requete devient toute simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT NUMERO_SIMPLIFIE,Count(NUMERO_SIMPLIFIE) FROM VERSION GROUP BY NUMERO_SIMPLIFIE

  3. #3
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    la meilleure solution est de redesigner la table pour stocker ces valeurs en conformité avec la première forme normale : chaque colonne contient des valeurs atomiques.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut
    Rudib,

    Peux tu préciser ta pensée ? tu souhaites stocker 1.1.4.3 dans 4 colonnes INT ?

  5. #5
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Oui, un TINYINT et trois SMALLINT, par exemple.

    http://www.developpez.net/forums/d41...e-normale-fn1/

  6. #6
    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
    Peux tu préciser ta pensée ? tu souhaites stocker 1.1.4.3 dans 4 colonnes INT ?
    Non pas 4 colonnes, une table fille en association 1:n !

    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/ * * * * *

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut
    En effet, il serait préférable de créer deux colonnes ou quatre suivant les besoins fonctionnels. merci pour cette information. La colonne calculée est un appendice sur une verrue.

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

Discussions similaires

  1. Jointure sur une même table
    Par JmL40 dans le forum Développement
    Réponses: 6
    Dernier message: 14/12/2010, 15h26
  2. Jointure sur une même table
    Par franquis dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/04/2010, 11h49
  3. [1.x] Jointure sur une même table
    Par tyx dans le forum Symfony
    Réponses: 1
    Dernier message: 04/08/2008, 11h19
  4. Auto jointure (sur une même table)
    Par freestyler dans le forum Langage SQL
    Réponses: 16
    Dernier message: 20/05/2008, 15h16
  5. jointure sur une même table
    Par guillaumeVb6 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/09/2004, 15h08

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