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




sql update (9)

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

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

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

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

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


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

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

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

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

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


Самый простой способ получить отдельные значения длинного списка текста с разделителями-запятыми - использовать find для замены в UNION чтобы получить различные значения.

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

Применяется к вашей длинной строке текста с разделителями-запятыми

  • Найдите и замените каждую запятую UNION SELECT
  • Добавьте SELECT перед заявлением

Теперь у вас должен быть рабочий запрос


Если вам нужен массив, разделите столбцы массива запятой:

SELECT * FROM (VALUES('WOMENS'),('MENS'),('CHILDRENS')) as X([Attribute])
,(VALUES(742),(318)) AS z([StoreID])


Это работает на 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 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);

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

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

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

Работает в ArcGIS


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-query