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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 009
    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 009
    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/ * * * * *

+ 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, 16h26
  2. Jointure sur une même table
    Par franquis dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/04/2010, 12h49
  3. [1.x] Jointure sur une même table
    Par tyx dans le forum Symfony
    Réponses: 1
    Dernier message: 04/08/2008, 12h19
  4. Auto jointure (sur une même table)
    Par freestyler dans le forum Langage SQL
    Réponses: 16
    Dernier message: 20/05/2008, 16h16
  5. jointure sur une même table
    Par guillaumeVb6 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/09/2004, 16h08

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