我有一个包含两列数据的表,如下所示:
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 子句,以便只考虑这些行
我有一个包含两列数据的表,如下所示:
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 子句,以便只考虑这些行
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
,但阅读时间更长。
实现相同目的的另一种方法:
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 ;
您可以尝试以下方法:
select distinct col1, col2 from table
where col2 + '-' + col1 not in (select col1 + '-' + col2 from your_table)
请注意,您必须连接字段,这取决于列类型(col1 + '-' + col2 适用于 char 和 varchar 类型)
怎么样:
SELECT
COL1, COL2, COUNT(*)
FROM
Your_Table
GROUP BY
COL1, COL2