我有一个包含两列的表格,其数据如下:
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子句,以便只考虑那些行
答案 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