2014-10-27 32 views
-1

我在sql表中有一堆列,我想将该表的每个字段插入到临时表中,其中一组列是不同。换句话说,假设我有一个列a,b,c,d,e,f和g的表格。我如何选择a,b和c不同的每一行?如何在SQL Server 2008 r2中选择其中一组不同列的所有列r2

+1

您正在使用哪些DBMS? Postgres的?甲骨文? (“SQL”是**不是** DBMS产品,它是查询语言) – 2014-10-27 20:31:06

+1

不同于什么?彼此还是与其他所有行相比? – 2014-10-27 20:32:03

+0

根据“distinct”的含义:可能是'distinct'关键字,适当的'group by'语句或适当的where语句将涵盖您。 – Conduit 2014-10-27 20:36:28

回答

1

假设你有没有NULL值,你只想做逻辑where子句中:

select t.* 
from table t 
where a <> b and a <> c and b <> c; 

编辑:

为了您的修改问题,解决方案可能是:

select t.* 
from (select t.*, count(*) over (partition by a, b, c) as cnt 
     from table t 
    ) t 
where cnt = 1; 
+0

+1它应该工作,但'数字与字符串'比较失败?在一般交叉数据类型.. – 2014-10-27 20:38:03

+0

这不是我想要的。我的意思是,我有列a-g,并且我希望集合a,b,c不同于其他a,b,c集合的每一行 – 2014-10-27 20:45:26

1

鉴于戈登的回答,我相信这应该适合你:

select * 
from table as main 
    inner join (
     select a, b, c, count(*) 
     from table 
     group by a, b, c 
     having count(*) = 1 
    ) as sub 
     on main.a = sub.a 
     and main.b = sub.b 
     and main.c = sub.c 
0

您可以使用COUNT(),通过a,b和c进行分区;

WITH cte AS (
    SELECT *, COUNT(1) OVER (PARTITION BY a, b, c) cnt FROM mytable 
) 
SELECT a, b, c, d, e, f, g FROM cte WHERE cnt=1; 

这将 - 对每一行 - 计数具有相同的A/B/C组合的行数,并返回是“唯一”的全部行(即,具有一个的计数)

0

所以最后,修复很简单。

select a, b, c, max(d) as d, max(e) as e, ...... max(g) as g into #temp 
from MyTable 
group by a, b, c