Partage
  • Partager sur Facebook
  • Partager sur Twitter

Rendre une colonne unique dans un select

DISTINCT ?

Sujet résolu
    17 décembre 2010 à 15:19:35

    Bonjour,

    Voici mon problème, j'ai une table de produits avec pleins de colonnes, une dizaines, je n'ai besoin que des 2 premières, les colonnes: code produit et nom produit.

    Mon problème étant le suivant:
    Le code produit possède énormément de doublons, c'est normal. Grâce à ma vue je veut rendre mon code unique.
    Alors j'utilise DISTINCT, seul problème parfois pour un code produit le nom produit est différent.
    Par exemple mon produit 1000 Solution Elixir peut s'appeler 1000 Sol Elixir et 1000 Solution Ex
    et donc mon DISTINCT ne fonctionne pas, mon code produit 1000 se retrouve 3 fois.

    Sans toucher aux données de la base de données, comment faire une vue qui évite ce genre de doublon ?

    Je voudrais que ma vue, pour le code produit 1000 me mettent le premier nom de produit qu'elle trouve (par ex: Solution Elixir) et ne répète plus le code produit 1000.

    J'utilise une SGBD WINDOWS SQL SERVER 2008

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      17 décembre 2010 à 16:40:09

      Je sais pas si on peut faire mieux
      mais sinon voila une solution hardeuse
      CREATE TABLE table_temp (code_produit INT, nom_produit VARCHAR(30))
      DECLARE		c_prod CURSOR FOR
      		select code_produit from tatable
      DECLARE		@prod varchar(10)
      DECLARE		@requete VARCHAR(4096)
      OPEN		c_prod
      FETCH NEXT FROM c_prod INTO  @prod
      WHILE	@@fetch_status = 0 BEGIN
      		SET @requete = '
      		INSERT INTO table_temp
      		select top 1 code_produit, nom_produit from tatable where code_produit = '+@prod+'
      		'
      	EXEC (@requete)
      	FETCH NEXT FROM c_prod INTO @prod
      END
      
      CLOSE	c_prod
      DEALLOCATE c_prod
      
      select * from table_temp
      drop table table_temp
      
      • Partager sur Facebook
      • Partager sur Twitter
        17 décembre 2010 à 16:47:23

        Je me demande pourquoi c'est autant le bordel dans cette table XDDD

        Sinon :

        SELECT code_produit, max(nom) FROM produits GROUP BY code_produit;

        ou

        SELECT DISTINCT a, first_value(b) OVER (PARTITION BY a) FROM popo;
        • Partager sur Facebook
        • Partager sur Twitter
          17 décembre 2010 à 16:49:52

          Merci pour votre contribution, en effet j'ai pu tester avec le group by max et celà marche parfaitement. En effet c'est une BDD de Microsoft Dynamics AX ERP de MS, et les tables sont d'un bordel pas possible. Aucune ID unique, des milliers de colonnes et des tables avec des noms pas très explicite. Pour m'y trouver un peu dans tout ce merdier j'utilise les vues.

          Merci à vous 2 et bon week-end
          • Partager sur Facebook
          • Partager sur Twitter

          Rendre une colonne unique dans un select

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown