我有一个非常简单的问题,我无法解决。我需要做这样的事情:
select distinct * from (1, 1, 1, 2, 5, 1, 6).
任何人都可以帮忙??
修改
数据来自我们的一个客户的文本文件。它完全没有格式化(它是一个单一的,非常长的文本行),但它可能在Excel中这样做。但这对我来说不实用,因为我需要在我的sql查询中使用这些值。每次我需要运行查询时这样做都不方便。
答案 0 :(得分:359)
仅适用于SQL Server 2008及以上形式的行构造函数:
你可以用
SELECT DISTINCT * FROM (VALUES (1), (1), (1), (2), (5), (1), (6)) AS X(a)
许多人写道,其中包括:
答案 1 :(得分:70)
获取逗号分隔文本长列表不同值的最简单方法是使用查找替换为UNION来获取不同的值。
SELECT 1
UNION SELECT 1
UNION SELECT 1
UNION SELECT 2
UNION SELECT 5
UNION SELECT 1
UNION SELECT 6
应用于您的长行逗号分隔文本
UNION SELECT
SELECT
您现在应该有一个有效的查询
答案 2 :(得分:54)
一般来说:
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)
答案 3 :(得分:38)
您是否尝试过使用以下语法?
select * from (values (1), (2), (3), (4), (5)) numbers(number)
答案 4 :(得分:19)
如果您只想从单个表格中选择某些值,可以试试这个
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
答案 5 :(得分:11)
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)
答案 6 :(得分:9)
这适用于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)
答案 7 :(得分:1)
如果需要数组,请使用逗号分隔数组列:
public class SuperClass{
protected String query;
public SuperClass(){}
public SuperClass(String query)
{
this.query=query;
System.out.println("Super Class");
}
public String toString()
{
return query="value";
}
}
答案 8 :(得分:0)
您可以使用的另一种方法是这样的查询:
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);
答案 9 :(得分:0)
我知道这是一个很老的话题,但是我正在寻找类似的东西并提出来。
鉴于您使用逗号分隔的字符串,可以使用string_split
select distinct value from string_split('1, 1, 1, 2, 5, 1, 6',',')
这应该返回
1
2
5
6
字符串拆分有两个参数,字符串输入和分隔符。
您可以使用value
作为列名添加可选的where语句
select distinct value from string_split('1, 1, 1, 2, 5, 1, 6',',')
where value > 1
产生
2
5
6
答案 10 :(得分:0)
从用户ID列表中选择用户ID:
SELECT * FROM my_table WHERE user_id IN (1,3,5,7,9,4);
答案 11 :(得分:0)
如果它是现有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;
答案 12 :(得分:0)
我在要处理的大多数SQL DB上创建了一个函数。
CREATE OR ALTER FUNCTION [dbo].[UTIL_SplitList](@parList Varchar(MAX),@splitChar Varchar(1)=',')
Returns @t table (Column_Value varchar(MAX))
as
Begin
Declare @pos integer
set @pos = CharIndex(@splitChar, @parList)
while @pos > 0
Begin
Insert Into @t (Column_Value) VALUES (Left(@parList, @pos-1))
set @parList = Right(@parList, Len(@parList) - @pos)
set @pos = CharIndex(@splitChar, @parList)
End
Insert Into @t (Column_Value) VALUES (@parList)
Return
End
该函数存在后,就和
一样简单SELECT DISTINCT
*
FROM
[dbo].[UTIL_SplitList]('1,1,1,2,5,1,6',',')
答案 13 :(得分:-2)
一项对我有用的技术是查询一个你知道其中有大量记录的表,包括结果中的Row_Number字段
Select Top 10000 Row_Number() OVER (Order by fieldintable) As 'recnum' From largetable
将返回10000条记录的结果集,范围从1到10000,在另一个查询中使用此记录可以获得所需的结果
答案 14 :(得分:-2)
使用SQL In
函数
这样的事情:
SELECT * FROM mytable WHERE:
"VALUE" In (1,2,3,7,90,500)
在ArcGIS中使用处理