首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何消除跨列重复数据

如何消除跨列重复数据
EN

Stack Overflow用户
提问于 2014-10-19 03:35:12
回答 4查看 58关注 0票数 0

我有这样的神谕桌

代码语言:javascript
运行
复制
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等

我需要的输出是

代码语言:javascript
运行
复制
customer1    customer2    city
A                B          NY
A                C          NY
A                D          NY
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-19 05:03:26

我不知道如何将其转换为Oracle (如果有可能的话),但Postgres给出了简短的,如果可能是低效的话,

代码语言:javascript
运行
复制
 SELECT DISTINCT ON (LEAST(c1, c2), GREATEST(c1, c2))
   LEAST(c1, c2), GREATEST(c1, c2), city FROM t;
票数 1
EN

Stack Overflow用户

发布于 2014-10-19 04:02:11

我想这个能满足你的需要。两个case语句将对这两列进行排序。一旦排序,您就可以得到不同的行。

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2014-10-19 04:04:43

我们可以通过要求customer1 <= customer2达到一半,但这太过限制了。我们需要在custerm1 > customer2的情况下添加,而不是在第一组中添加。只要我们调整列名,NOT IN操作符就会在这里为我们工作。

代码语言:javascript
运行
复制
  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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26447038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档