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

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

有人可以帮忙吗?

编辑

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

有帮助吗?

解决方案

最简单的方法 一长串逗号分隔文本的独特价值 将使用查找替换 联盟 获得不同的值。

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

应用于您的逗号划界文本的长行

  • 找到并用 UNION SELECT
  • 添加一个 SELECT 在声明面前

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

其他提示

仅在SQL Server 2008及以上可用的是以下形式的行构建器:
您可以使用

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

许多人在其中写道:其中:

一般来说 :

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 * from (values (1), (2), (3), (4), (5)) numbers(number)

如果您只想从单个表中选择某些值,则可以尝试

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

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

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

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);

我知道这是一个非常古老的线程,但是我正在寻找类似的东西,并提出了这一点。

鉴于您有一个逗号分隔的字符串,您可以使用 string_split

select distinct value from string_split('1, 1, 1, 2, 5, 1, 6',',')

这应该返回

1
2
5
6

String Split采用两个参数,即字符串输入和分离器字符。

您可以添加一个可选的语句使用 value 作为列名称

select distinct value from string_split('1, 1, 1, 2, 5, 1, 6',',')
where value > 1

生产

2
5
6

对我有用的一种技术是查询您知道其中有大量记录的表格,其中包括您的结果中的row_number字段

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

将返回10000条记录的结果集,从1到10000,在另一个查询中使用它为您提供所需的结果

使用SQL In 功能

这样的事情:

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

在Arcgis工作

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top