从SQL Server中的结果集中删除重复的组合

时间:2012-10-19 14:36:46

标签: sql-server sql-server-2008

我有一个包含两列的表格,其数据如下:

1,2
1,3
1,4
2,1
2,2
3,1

我想选择唯一的组合,所以我最终会选择:

1,2
1,3
1,4
2,2

因为1,2与2,1等相同的组合

我将如何在SQL语句中进行此操作?

实际上,我的表有第三列,我想根据第三列添加一个where子句,以便只考虑那些行

4 个答案:

答案 0 :(得分:7)

实现同样目标的另一种方法:

SELECT a, b
FROM tableX
WHERE a <= b
  AND (other conditions)

UNION 

SELECT b, a
FROM tableX 
WHERE a > b 
  AND (other conditions) ;

这种变化可能会有所不同(关于效率),具体取决于您拥有的索引:

SELECT *
FROM
  ( SELECT a, b
    FROM tableX
    WHERE (other conditions)
  UNION 
    SELECT b, a
    FROM tableX 
    WHERE (other conditions)
  ) AS tmp
WHERE a <= b ;

答案 1 :(得分:6)

SELECT * FROM (
    SELECT
        CASE WHEN Col1 <= Col2 THEN Col1 ELSE Col2 END AS Col1,
        CASE WHEN Col1 <= Col2 THEN Col2 ELSE Col1 END AS Col2
    FROM
        MyTable
) Ordered
GROUP BY
    Col1, Col2

您可以通过GROUP CASE表达式在没有子查询的情况下执行此操作,但需要阅读时间更长。

答案 2 :(得分:-1)

您可以尝试以下内容:

select distinct col1, col2 from table
where col2 + '-' + col1 not in (select col1 + '-' + col2 from your_table)

请注意,您必须连接字段并且它取决于列类型(col1 +' - '+ col2适用于char和varchar类型)

答案 3 :(得分:-9)

怎么样:

SELECT
      COL1, COL2, COUNT(*)
FROM
     Your_Table
GROUP BY
      COL1, COL2