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

Développement SQL Server Discussion :

Valeurs présentes dans au moins une colonne [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut Valeurs présentes dans au moins une colonne
    Bonjour,

    Je me pose la question sur la façon de faire.
    Voici mon problème, j'ai une table très mal conçue qui me donne l'utilisation pour une info.
    Exemple cette info me sert pour une couleur de voiture, mais également pour la couleur d'un pare choc.

    Voici la table

    IdInfo Idutilision_0 Idutilision_1 Idutilision_2
    1 5 12 1
    2 11 1 12
    3 12 1 15
    4 5 1 2
    5 12 1 2
    6 11 1 2
    7 15 1 2
    8 5 1 NULL
    9 5 1 NULL
    10 8 1 NULL
    11 1 2 NULL
    12 1 2 NULL

    Code SQL : 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
    CREATE TABLE [dbo].[UtilisationInfo](
        [IdInfo] [int] NOT NULL,
        [Idutilision_0] [int] NULL,
        [Idutilision_1] [int] NULL,
        [Idutilision_2] [int] NULL
    ) ON [PRIMARY]
     
     
    GO
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (1, 5, 12, 1)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (2, 11, 1, 12)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (3, 12, 1, 15)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (4, 5, 1, 2)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (5, 12, 1, 2)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (6, 11, 1, 2)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (7, 15, 1, 2)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (8, 5, 1, NULL)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (9, 5, 1, NULL)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (10, 8, 1, NULL)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (11, 1, 2, NULL)
    INSERT [dbo].[UtilisationInfo] ([IdInfo], [Idutilision_0], [Idutilision_1], [Idutilision_2]) VALUES (12, 1, 2, NULL)

    Je veux trouver les lignes dont l'utilisation est 12 ou 15.
    Je suis donc partie sur UNION

    Ce qui me donne

    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
    30
    31
    32
    33
    34
    35
    36
    SELECT [IdInfo]    , [Idutilision_0]
        , [Idutilision_1]
        , [Idutilision_2]
    FROM [dbo].[UtilisationInfo]
    WHERE [Idutilision_0] IN (
            12
            , 15
            )
     
     
    UNION
     
     
    SELECT [IdInfo]
        , [Idutilision_0]
        , [Idutilision_1]
        , [Idutilision_2]
    FROM [dbo].[UtilisationInfo]
    WHERE [Idutilision_1] IN (
            12
            , 15
            )
     
     
    UNION
     
     
    SELECT [IdInfo]
        , [Idutilision_0]
        , [Idutilision_1]
        , [Idutilision_2]
    FROM [dbo].[UtilisationInfo]
    WHERE [Idutilision_2] IN (
            12
            , 15
            )
    ainsi j'obtiens bien ce dont j'ai besoin.
    Mais je me demande s'il n'y a pas un autre moyen.
    Je connais déjà les premier retour sur la conception de la table, j'ai déjà fait toutes les remarques nécessaire moi même.
    Mais partons de l'hypothèse que ce sont des contraintes non contournable.

    Merci d'avance pour vos expériences.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bon ok..

    J'étais très mal réveillé..

    on peux aussi faire simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT [IdInfo]    , [Idutilision_0]
        , [Idutilision_1]
        , [Idutilision_2]
    FROM [dbo].[UtilisationInfo]
    WHERE [Idutilision_0] IN (12, 15)
    OR [Idutilision_1] IN (12, 15)
    OR [Idutilision_2] IN (12, 15)
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    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 790
    Points
    30 790
    Par défaut
    S ton besoin est récurrent, ça peut valoir la peine de créer une vue qui normalise la structure de ta table.
    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
    CREATE VIEW Utilisation_Info
        AS  SELECT  IdInfo
                ,   0               AS  Indice
                ,   Idutilision_0   AS  Idutilision
            FROM    UtilisationInfo
            WHERE   Idutilision_0   IS NOT NULL
        UNION ALL
            SELECT  IdInfo
                ,   1               AS  Indice
                ,   Idutilision_1   AS  Idutilision
            FROM    Utilisation_Info
            WHERE   Idutilision_1   IS NOT NULL
        UNION ALL
            SELECT  IdInfo
                ,   2               AS  Indice
                ,   Idutilision_2   AS  Idutilision
            FROM    UtilisationInfo
            WHERE   Idutilision_2   IS NOT NULL
    ;
    La recherche s'en trouve largement simplifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  IdInfo
    FROM    Utilisation_Info
    WHERE   Idutilision IN  (12,15)
    ;
    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.

  4. #4
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Merci pour l'aide.
    C'est vrai qu'il est plus simple de normaliser la table avec une vue.
    Ainsi je gagnerai mon temps.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

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

Discussions similaires

  1. [XL-2010] Afficher les différentes valeurs présentes dans une colonne
    Par Toug19 dans le forum Excel
    Réponses: 5
    Dernier message: 23/07/2015, 14h31
  2. Réponses: 1
    Dernier message: 25/12/2009, 12h36
  3. Recherche d'une valeur présent dans une table mais pas dans une autre
    Par bossLINDROS dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/06/2008, 15h12
  4. [VBA] fonction qui donne la valeur présente dans une table
    Par zanou666 dans le forum VBA Access
    Réponses: 7
    Dernier message: 25/09/2007, 17h33
  5. calcul de valeurs présentes dans une liste de résultat
    Par Makaveli33 dans le forum Access
    Réponses: 8
    Dernier message: 15/05/2006, 19h03

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