342 votes

Comment sélectionner une liste de valeurs dans SQL Server

J'ai un problème très simple que je ne peux pas résoudre. J'ai besoin de faire quelque chose comme ça:

 select distinct * from (1, 1, 1, 2, 5, 1, 6).
 

Tout le monde peut aider?

641voto

pm. Points 581

Disponible uniquement sur SqlServer2008 et plus de ligne est un constructeur dans ce formulaire:
vous pouvez utiliser

select distinct * from (values (1), (1), (1), (2), (5), (1), (6)) as X(a)

De nombreuses personnes ont écrit à propos de, parmi eux:

107voto

Lieven Keersmaekers Points 32396

Le moyen le plus simple que je connaisse serait d'utiliser une union pour obtenir les valeurs distinctes.

 SELECT 1
UNION SELECT 1
UNION SELECT 1
UNION SELECT 2
UNION SELECT 5
UNION SELECT 1
UNION SELECT 6
 

Appliqué à votre longue ligne de texte délimité par des virgules

  • Recherchez et remplacez chaque virgule par UNION SELECT
  • Ajouter un SELECT devant l'énoncé

Vous devriez maintenant avoir une requête de travail

22voto

Anirudh Goel Points 1622
  • Si vous souhaitez sélectionner seulement certains les valeurs à partir d'un seul tableau, vous pouvez essayez ceci

    select distinct(*) from table_name où table_field (1,1,2,3,4,5)

    par exemple: select prenom,phone_number de telephone_list où le district id (1,2,5,7,8,9)

  • si vous souhaitez sélectionner à partir de plusieurs les tables, alors vous devez aller de l'UNION.

  • Si vous voulez juste de sélectionner les valeurs 1, 1, 1, 2, 5, 1, 6 ensuite, vous devez faire cette

    sélectionnez 1 union select 1 union select 1 union select 2 union select 5 union sélectionnez 1 union select 6

20voto

Arek Points 31

PostgreSQL vous offre 2 façons de le faire:

SELECT DISTINCT * FROM (VALUES('a'),('b'),('a'),('v')) AS tbl(col1)

ou

SELECT DISTINCT * FROM (select unnest(array['a','b', 'a','v'])) AS tbl(col1)

à l'aide du tableau de l'approche que vous pouvez aussi faire quelque chose comme ceci:

SELECT DISTINCT * FROM (select unnest(string_to_array('a;b;c;d;e;f;a;b;d', ';'))) AS tbl(col1)

8voto

LukLed Points 18010

Cela fonctionne sur SQL Server 2005 et si il y a nombre maximal:

SELECT * 
FROM
  (SELECT ROW_NUMBER() OVER(ORDER BY a.id) NUMBER
  FROM syscomments a
  CROSS JOIN syscomments b) c
WHERE c.NUMBER IN (1,4,6,7,9)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X