2

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

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

4 回答 4

10
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您可以通过对表达式进行 ing 来在没有子查询的情况下执行此操作CASE,但阅读时间更长。

于 2012-10-19T14:50:23.443 回答
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 ;
于 2012-10-19T15:10:40.620 回答
-1

您可以尝试以下方法:

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

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

于 2012-10-19T14:49:56.313 回答
-9

怎么样:

SELECT
      COL1, COL2, COUNT(*)
FROM
     Your_Table
GROUP BY
      COL1, COL2
于 2012-10-19T14:43:33.863 回答