我有一个非常简单的问题,我无法解决。我需要这样做:
select distinct * from (1, 1, 1, 2, 5, 1, 6).
谁都能帮忙??
编辑
数据以文本文件的形式来自我们的一个客户。它是完全没有格式的(它是一个很长的文本行),但在Excel中可以这样做。但这对我来说并不实际,因为我需要在sql查询中使用这些值。每次需要运行查询时这样做并不方便。
我有一个非常简单的问题,我无法解决。我需要这样做:
select distinct * from (1, 1, 1, 2, 5, 1, 6).
谁都能帮忙??
编辑
数据以文本文件的形式来自我们的一个客户。它是完全没有格式的(它是一个很长的文本行),但在Excel中可以这样做。但这对我来说并不实际,因为我需要在sql查询中使用这些值。每次需要运行查询时这样做并不方便。
当前回答
我知道这是一个相当老的线程,但我正在寻找类似的东西,然后想到了这个。
假设您有一个逗号分隔的字符串,您可以使用string_split
select distinct value from string_split('1, 1, 1, 2, 5, 1, 6',',')
这应该会返回
1
2
5
6
字符串分割接受两个参数,字符串输入和分隔符。
您可以添加一个可选的where语句,使用value作为列名
select distinct value from string_split('1, 1, 1, 2, 5, 1, 6',',')
where value > 1
生产
2
5
6
其他回答
要获得由逗号分隔的文本组成的长列表的不同值,最简单的方法是使用find an替换为UNION来获得不同的值。
SELECT 1
UNION SELECT 1
UNION SELECT 1
UNION SELECT 2
UNION SELECT 5
UNION SELECT 1
UNION SELECT 6
应用于由逗号分隔的文本组成的长行
用UNION SELECT查找并替换每个逗号 在语句前面添加一个SELECT
现在您应该有一个可以工作的查询
如果它是一个来自现有SQL表的参数列表,例如来自现有Table1的ID列表,那么你可以尝试这样做:
select distinct ID
FROM Table1
where
ID in (1, 1, 1, 2, 5, 1, 6)
ORDER BY ID;
或者,如果你需要参数列表作为一个SQL表常量(变量),试试这个:
WITH Id_list AS (
select ID
FROM Table1
where
ID in (1, 1, 1, 2, 5, 1, 6)
)
SELECT distinct * FROM Id_list
ORDER BY ID;
使用SQL In函数
就像这样:
SELECT * FROM mytable WHERE:
"VALUE" In (1,2,3,7,90,500)
在ArcGIS中工作
你可以使用的另一种方式是这样的查询:
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)
eg:
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