таблиц - Как выбрать из списка значений в SQL Server




sql update (8)

PostgreSQL дает вам два способа сделать это:

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

или

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

используя метод массива, вы также можете сделать что-то вроде этого:

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

У меня очень простая проблема, которую я не могу решить. Мне нужно сделать что-то вроде этого:

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

Кто-нибудь может помочь?

редактировать

Данные поступают в виде текстового файла от одного из наших клиентов. Он полностью неформатирован (это одна, очень длинная строка текста), но в Excel это возможно. Но это не практично для меня, потому что мне нужно будет использовать эти значения в моем sql-запросе. Это не удобно делать каждый раз, когда мне нужно запустить запрос.


В целом :

SELECT 
  DISTINCT 
  FieldName1, FieldName2, ..., FieldNameN
FROM
  (
    Values
    (ValueForField1,ValueForField2,...,ValueForFieldN),
    (ValueForField1,ValueForField2,...,ValueForFieldN),
    (ValueForField1,ValueForField2,...,ValueForFieldN),
    (ValueForField1,ValueForField2,...,ValueForFieldN),
    (ValueForField1,ValueForField2,...,ValueForFieldN)
  )AS TempTableName (FieldName1, FieldName2, ..., FieldNameN)

В твоем случае :

Select 
  distinct
  TempTableName.Field1 
From 
  (
  VALUES
    (1), 
    (1), 
    (1), 
    (2), 
    (5), 
    (1), 
    (6)
  ) AS TempTableName (Field1)


Другим способом, который вы можете использовать, является такой запрос:

SELECT DISTINCT
    LTRIM(m.n.value('.[1]','varchar(8000)')) as columnName
FROM 
    (SELECT CAST('<XMLRoot><RowData>' + REPLACE(t.val,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
     FROM (SELECT '1, 1, 1, 2, 5, 1, 6') AS t(val)
    ) dt
  CROSS APPLY 
    x.nodes('/XMLRoot/RowData') m(n);

Если вы хотите выбрать только определенные значения из одной таблицы, вы можете попробовать это

select distinct(*) from table_name where table_field in (1,1,2,3,4,5)

например:

select first_name,phone_number from telephone_list where district id in (1,2,5,7,8,9)

если вы хотите выбрать из нескольких таблиц, то вы должны пойти в UNION .

Если вы просто хотите выбрать значения 1, 1, 1, 2, 5, 1, 6, то вы должны сделать это

select 1 
union select 1 
union select 1 
union select 2 
union select 5 
union select 1 
union select 6

Использовать функцию SQL In

Что-то вроде этого:

SELECT * FROM mytable WHERE:
"VALUE" In (1,2,3,7,90,500)

Работает в ArcGIS


Техника, которая работала для меня, - это запрос таблицы, в которой вы знаете, имеет большое количество записей в ней, включая только поле Row_Number в вашем результате

Select Top 10000 Row_Number() OVER (Order by fieldintable) As 'recnum' From largetable

вернет результирующий набор из 10000 записей от 1 до 10000, используйте это в другом запросе, чтобы дать вам желаемые результаты


Это работает на SQL Server 2005 и максимальном числе:

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)




select-query