我有这样的神谕桌
customer1 customer2 city
A B NY
B A NY
A C NY
A D NY
D A NY
C A NY我只是对独特的组合感兴趣。
A、B或B、A等
我需要的输出是
customer1 customer2 city
A B NY
A C NY
A D NY发布于 2014-10-19 05:03:26
我不知道如何将其转换为Oracle (如果有可能的话),但Postgres给出了简短的,如果可能是低效的话,
SELECT DISTINCT ON (LEAST(c1, c2), GREATEST(c1, c2))
LEAST(c1, c2), GREATEST(c1, c2), city FROM t;发布于 2014-10-19 04:02:11
我想这个能满足你的需要。两个case语句将对这两列进行排序。一旦排序,您就可以得到不同的行。
SELECT DISTINCT
CASE WHEN customer1 < customer2 THEN customer1 ELSE customer2 END customer1,
CASE WHEN customer1 > customer2 THEN customer1 ELSE customer2 END customer2,
city
FROM TABLE发布于 2014-10-19 04:04:43
我们可以通过要求customer1 <= customer2达到一半,但这太过限制了。我们需要在custerm1 > customer2的情况下添加,而不是在第一组中添加。只要我们调整列名,NOT IN操作符就会在这里为我们工作。
SELECT c1, c2, city
FROM t
HAVING c1 <= c2
UNION
SELECT c1, c2, city
FROM t
WHERE c1 > c2
AND (c1, c2, city) NOT IN
(
SELECT c2 AS c1
, c1 AS c2
, city
FROM t
WHERE c1 <= c2
)在这里看到它的作用:http://sqlfiddle.com/#!2/78d1c/23
https://stackoverflow.com/questions/26447038
复制相似问题