区别2字段AS一列SQL SERVER

时间:2014-12-30 09:48:14

标签: sql-server

我可以在表AS上选择不同的2个字段(provfrom,provto) 条件: - 2个字段的值在一行中永远不会相同 - 字段provfrom中的值可以在字段provo内,但在不同的行中 - 字段provto中的值可以在字段provfrom内但在不同的行

示例: 我有2列如下

 -------------------------
|  provfrom   |  provto   |
 -------------------------
|  2          |    4      |
|  3          |    7      |
|  3          |    7      |
|  5          |    2      |
|  5          |    2      |
|  7          |    2      |
|  7          |    2      |
|  1          |    5      |
|  2          |    5      |
|  2          |    8      |
|  5          |    8      |
 -------------------------

disticnt我想要的结果如下

 -------------
|  prov       |
 -------------
|  1          |
|  2          |
|  3          |
|  4          |
|  5          |
|  7          |
|  8          |
 -------------

我可以在sql server中执行此操作吗? 我试图通过探索谷歌找到,但没有找到它

由于

3 个答案:

答案 0 :(得分:4)

您可以使用Union关键字,它会从两个表中提供distinct个元素

select provfrom  from mytable
union 
select provTo   from mytable

答案 1 :(得分:2)

您可以使用union或使用apply执行此操作,应用的IO较少,因此我会使用应用查询。

create table #temp
(
    provfrom tinyint,
    provto tinyint
);

insert into #temp (provfrom, provto) 
       values (2,4),(3,7),(3,7),   
              (5,2),(5,2),(7,2),   
              (7,2),(1,5),(2,5),   
              (2,8),(5,8); 

set statistics io on;

select distinct 
    a.provfromto
from #temp as t
cross apply (values (t.provfrom),(t.provto)) as a(provfromto);

select provfrom from #temp
union 
select provTo from #temp

set statistics io off;
drop table #temp;

答案 2 :(得分:1)

试试这个:

select t.prov
from 
    (select provfrom as prov
    from yourtable
    union
    select provto
    from yourtable) as t
order by t.prov

UNION函数应用一个不同的子句,因此您每次出现都会获得所有值。

有关排序结果集的外部查询