创建组指示符 (SQL)

Posted

技术标签:

【中文标题】创建组指示符 (SQL)【英文标题】:Create a group indicator (SQL) 【发布时间】:2013-10-22 15:43:31 【问题描述】:

我希望使用 SQL(特别是 Oracle)为查询创建组指示器。基本上,我正在寻找某些列的重复条目,虽然我可以找到那些我也想要的是某种指示符来说明重复项来自哪些行。

下面是我想要做的一个例子(在姓名、邮编、电话上查找重复项)。 Name = aaa 的行都在同一个组中,bb 不在,c 在。

有没有办法做到这一点?我在想 OVER (PARTITION BY ... 但我想不出一种只为每个组增加的方法。

+----------+---------+-----------+------------+-----------+-----------+
| Name     | Zip     | Phone     | Amount     | Duplicate | Group     |
+----------+---------+-----------+------------+-----------+-----------+
| aaa      | 1234    | 5555555   | 500        | X         | 1         |
| aaa      | 1234    | 5555555   | 285        | X         | 1         |
| bb       | 545     | 6666666   | 358        |           | 2         |
| bb       | 686     | 7777777   | 898        |           | 3         |
| aaa      | 1234    | 5555555   | 550        | X         | 1         |
| c        | 5555    | 8888888   | 234        | X         | 4         |
| c        | 5555    | 8888888   | 999        | X         | 4         |
| c        | 5555    | 8888888   | 230        | X         | 4         |
+----------+---------+-----------+------------+-----------+-----------+

【问题讨论】:

【参考方案1】:

看起来你可以使用

(CASE WHEN COUNT(*) OVER (partition by name, zip, phone) > 1
      THEN 'X'
      ELSE NULL
  END) duplicate,
DENSE_RANK() OVER (ORDER BY name, zip, phone) group_rank

具有相同namezipphone 的行将具有相同的group_rank。这是SQL Fiddle example。

【讨论】:

以上是关于创建组指示符 (SQL)的主要内容,如果未能解决你的问题,请参考以下文章

ExpandableListView - 为没有孩子的组隐藏指示器

SQL 查询具有带有二进制指示符和时间差的新列

ExpandableListView 显示没有子组的指示符

如何对 tableview 行进行操作以及如何在其中添加添加披露指示符?

如何在所有幻灯片中将标题、文本和点指示符的位置更改为左下角

在选项卡1上显示的活动指示符以及选项卡2(我只希望它显示在标签2上 - 当加载时)