Sql server 用于在SQL Server中查找表中所有不同值的函数

Sql server 用于在SQL Server中查找表中所有不同值的函数,sql-server,Sql Server,我需要一个用于SQL Server表中所有不同值的函数 例如,如果我的表格如下所示: field1 | field2 | ... | field8 ---------+----------+-----+--------- valuef11 | valuef21 | ... | valuef81 valuef12 | valuef22 | ... | valuef82 etc... 然后我需要返回一个包含2个字段的表,如下所示: field1 valuef11 field1 valuef

我需要一个用于SQL Server表中所有不同值的函数

例如,如果我的表格如下所示:

field1   | field2   | ... | field8
---------+----------+-----+---------
valuef11 | valuef21 | ... | valuef81
valuef12 | valuef22 | ... | valuef82
etc...
然后我需要返回一个包含2个字段的表,如下所示:

field1 valuef11
field1 valuef12
field1 valuef13
field2 valuef21
field2 valuef22
....
field8 valuef81
field8 valuef82
field8 valuef83
field8 valuef84

您希望根据8个字段进行区分,并显示2个字段

如果你这样做,你会有重复的配对。这就是你想要的吗?或者你想做一个“groupby”子句

干杯

我想你正在寻找这个:

SELECT DISTINCT 'field1' AS fieldname, field1 FROM yourtable
UNION ALL
SELECT DISTINCT 'field2' AS fieldname, field2 FROM yourtable
UNION ALL
...
UNION ALL
SELECT DISTINCT 'field8' AS fieldname, field8 FROM yourtable
请注意,这假定所有字段都具有相同的类型

在SQL Server 2005或更新版本中,您还可以使用:


同样,这假设所有字段都具有相同的类型。

您可以使用包装在
不同的子查询中的
联合

select  distinct A
,       B
from    (   
        select field1 as A, field11 as B from YourTable
        union all
        select field1, field12 from YourTable
        union all
        select field1, field13 from YourTable
        union all
        select field2, field21 from YourTable
        union all
        select field2, field22 from YourTable
        ) as SubQueryAlias
如果第一个字段的长度始终为6个字符,第二个字段的长度始终为7个字符,则可以生成如下查询:

declare @sql varchar(max)

select  @sql = case 
            when @sql is null then 'select ' + a.name + ' as a, ' + b.name + 
                ' as b from TestTable '
            else @sql + 'union all select ' + a.name + ', ' + b.name + 
                ' from TestTable ' 
            end
from    sys.all_columns a
join    sys.all_columns b
on      len(b.name) = 7
        and substring(b.name,1,6) = a.name
        and b.object_id = a.object_id
where   a.object_id = object_id('TestTable')

set @sql = 'select distinct a, b from (' + @sql + ') as SubQueryAlias'

exec (@sql)

您的回答很好,但我需要自动生成此表,因为具有类似输出的类似表对于me@jozi当前位置坦率地说,这样做听起来真是个坏主意。你能解释一下你为什么需要它吗?我需要一个存储过程,通过输入表名和输出表我的解释我有50个表,我的用户填写它。我将为所有表做这项工作,从我所有的表中获得unic值table@jozi:不是50张桌子,而是有一个很好的理由不能使用一张桌子,如果我的表和我的文件发生了变化,我需要覆盖这段代码,但我不会this@jozi:增加了一种方法,但我会尽量避免在生产数据库中使用这种方法您使用的是什么版本的SQL Server?
declare @sql varchar(max)

select  @sql = case 
            when @sql is null then 'select ' + a.name + ' as a, ' + b.name + 
                ' as b from TestTable '
            else @sql + 'union all select ' + a.name + ', ' + b.name + 
                ' from TestTable ' 
            end
from    sys.all_columns a
join    sys.all_columns b
on      len(b.name) = 7
        and substring(b.name,1,6) = a.name
        and b.object_id = a.object_id
where   a.object_id = object_id('TestTable')

set @sql = 'select distinct a, b from (' + @sql + ') as SubQueryAlias'

exec (@sql)