创建组指示符 (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
具有相同name
、zip
和phone
的行将具有相同的group_rank
。这是SQL Fiddle example。
【讨论】:
以上是关于创建组指示符 (SQL)的主要内容,如果未能解决你的问题,请参考以下文章
ExpandableListView - 为没有孩子的组隐藏指示器