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 :

DEBUTANT : Bricolage de Ligne valuée ?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Par défaut DEBUTANT : Bricolage de Ligne valuée ?
    Bonjour à tous.

    J'ai une table T_Tarif sur laquelle la clé primaire est composé des colonnes Article et Tarif
    Je souhaite assurer l'unicité par la seule colonne Article et donc ne conserver qu'un seul tarif par article, en l'occurence celui dont l' ID est le plus faible.

    Avant de commencer, j'ai lancé une requête me renvoyant les lignes a conserver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Article_ID, MIN(Tarif_ID) FROM T_TARIF GROUP BY Article_ID
    Puis je me suis dit que pour supprimer les lignes superflues, il suffisait de supprimer les lignes ne faisant pas partie de cet ensemble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM T_TARIF WHERE (Article_ID, Tarif_ID) NOT IN 
    (SELECT Article_ID, MIN(Tarif_ID) FROM T_TARIF GROUP BY Article_ID)
    Et là ca coince, Il semble que SQL SERVER 2005 n'accepte pas la ligne valuée (Article_ID, Tarif_ID) après la clause WHERE
    De quelle façon faut-il s'y prendre ?
    Suis-je obliger de bricoler une ligne valuée (du style caster en chaine puis concatener les 2 colonnes !!! ) ?

  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 MATCH
    La fonction SQL Match qui permet de faire correspondre deux valeurs à une sous requete n'est pas implementer sur sql serveur.
    http://sqlpro.developpez.com/cours/s...requetes/#L1.3

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Par défaut
    Résolu... effectivement en construisant une expression qui contourne l'absence des chaines valuées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DELETE FROM T_TARIF
    WHERE CAST (ARTICLE_ID AS VARCHAR(13)) + '/' + 
              CAST (TARIF_ID AS VARCHAR(13))
    NOT IN  (SELECT CAST (ARTICLE_ID AS VARCHAR(13)) + '/' + 
                           CAST(MIN (TARIF_ID) AS VARCHAR(13))
                    FROM T_TARIF 
                    GROUP BY ARTICLE_ID)

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 : 21 999
    Billets dans le blog
    6
    Par défaut
    Il aurait mieux valu utiliser un NOT EXISTS, car cela risque de supprimer des lignes qui ne devrait aps l'^^etre.

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

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Par défaut
    Il aurait mieux valu utiliser un NOT EXISTS, car cela risque de supprimer des lignes qui ne devrait aps l'^^etre.
    Toutes les colonnes étant NOT NULL et <> de 0, je n'ai pas creuser de ce coté là, ... mais à part cà, je ne voit pas comment ? si tu as le temps n'hésite pas à m'éclairer.
    Cdt.

  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
    21 999
    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 : 21 999
    Billets dans le blog
    6
    Par défaut
    quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE FROM T_TARIF
    WHERE  NOT EXISTS(SELECT 1
                      FROM   T_TARIF T
                      WHERE  T_TARIF.ARTICLE_ID = T.ARTICLE_ID
                        AND  T_TARIF.TARIF_ID = MIN(T.TARIF_ID)
                      GROUP  BY T.ARTICLE_ID)
    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. [HTML][DEBUTANT] centrer une ligne de texte.
    Par heider dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 20/11/2005, 16h15
  2. [debutant]lecture fichier ligne par ligne
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 19h02
  3. [debutant] ajout de ligne a un tableau
    Par rivierem dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 29/09/2005, 10h44
  4. [debutant] supprimmer une ligne d'un fichier
    Par F.F. dans le forum Débuter
    Réponses: 2
    Dernier message: 25/05/2005, 08h45
  5. [DEBUTANT]comparaison une ligne avec un STRing
    Par Battosaiii dans le forum Langage
    Réponses: 2
    Dernier message: 05/05/2005, 20h15

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