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

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

其他回答

这样的行构造函数只能在SQL Server 2008及以上版本上使用: 你可以用

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

有关更多信息,请参阅:

官方的女士 http://www.sql-server-helper.com/sql-server-2008/row-value-constructor-as-derived-table.aspx

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

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

如果你需要一个数组,用逗号分隔数组列:

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

我知道这是一个相当老的线程,但我正在寻找类似的东西,然后想到了这个。

假设您有一个逗号分隔的字符串,您可以使用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