我如何从SQL Server中的值列表中进行select

我有非常简单的问题,我无法解决。 我需要做这样的事情:

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

任何人都可以帮忙?

编辑

数据来自我们的客户之一的文本文件。 这是完全没有格式的(这是一个单一的,很长的文本行),但它可能会在Excel中这样做。 但这对我来说并不实际,因为我需要在我的sql查询中使用这些值。 每次我需要运行一个查询都不方便。

获取逗号分隔文本的长列表不同值的最简单方法是使用UNION的查找replace来获取不同的值。

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

应用于您的逗号分隔文本的长行

  • 使用UNION SELECT查找并replace每个逗号
  • 在语句前添加一个SELECT

你现在应该有一个工作查询

仅适用于SQL Server 2008及以上版本是以这种forms的行构造函数:
你可以使用

 SELECT DISTINCT * FROM (VALUES (1), (1), (1), (2), (5), (1), (6)) AS X(a) 

其中有许多写道:

你有没有尝试过使用下面的语法?

 select * from (values (1), (2), (3), (4), (5)) numbers(number) 

一般来说 :

 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某些值,你可以试试这个

 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) 

如果你想从多个表中select,那么你必须去UNION

如果你只想select值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 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) 

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) 

使用SQL In函数

像这样的东西:

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

在ArcGIS中工作

另一种可以使用的方法是这样的查询:

 SELECT DISTINCT LTRIM(mnvalue('.[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 * FROM (VALUES('WOMENS'),('MENS'),('CHILDRENS')) as X([Attribute]) ,(VALUES(742),(318)) AS z([StoreID]) 

对我来说,一个技巧就是查询一个你知道有大量logging的表,包括结果中的Row_Number字段

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

将返回1到10000的10000个logging的结果集,在另一个查询中使用这个结果集来给出你想要的结果