我无法在SQL中找到问题的良好解决方案。
说我有这样的表:
ID | A | A
--------------------
4427 | 2 | 3
4427 | 3 | 2
4427 | 3 | 5
4427 | 5 | 3
4427 | 1 | 3
4427 | 2 | 5
4427 | 3 | 1
现在我想找到具有唯一ID和A组合的行。我的意思是我只想看到A(1)和A(2)的组合只存在一次的行。例如,表中的前两行是“相同的”,因为2和3的组合与3和2相同。
我的问题的预期结果将是:
ID | A | A
--------------------
4427 | 2 | 3
4427 | 3 | 5
4427 | 1 | 3
4427 | 2 | 5
我正在使用SQL Server 2008。
答案 0 :(得分:2)
如果我理解正确,这将是一个简单的" distinct"查询是否总是让ColA的值小于ColB。鉴于此,您可以使用case语句来处理此问题,并结合使用不同的运算符。
试试这个。
Select Distinct
ID,
Case When ColA < ColB Then ColA Else ColB End,
Case When ColA < ColB Then ColB Else ColA End
From YourTableHere
答案 1 :(得分:0)
一种方法。仅供参考,输出A1 / A2的顺序可能与原始值不同。如果你不在乎订单,你可以试试这个。
WITH cte AS (
SELECT ID,A1 AS A, ROW_NUMBER() OVER (ORDER BY A1,A2) AS rn FROM Table1
UNION ALL
SELECT ID,A2 AS A, ROW_NUMBER() OVER (ORDER BY A1,A2) AS rn FROM Table1
)
SELECT DISTINCT ID, MIN(A) AS A1, MAX(A) AS A2
FROM cte
GROUP BY ID, rn