sql - SQL如何按包含相同数据的两个不同列进行分组
问题描述
如何将以下数据组合在一起。
请注意,相同的数据可以在不同的列中,也可以在同一列中。
| 身份证 | 手机 | 主页 | | 1 | 空 | 626... | | 2 | 626... | 空 | | 3 | 405... | 空 | | 4 | 空 | 405... | | 5 | 626... | 405... | | 6 | 405... | 626... |
这样它就会产生这个结果
| 组ID | 身份证 | | 1 | 1 | | 1 | 2 | | 1 | 5 | | 1 | 6 | | 2 | 3 | | 2 | 4 | | 2 | 5 | | 2 | 6 |
GroupId 可以是随机生成的 ID,例如。NEWID(),它用于识别不同列之间的“重复”
空值被忽略。
解决方案
我猜,您需要从,值COALESCE
返回非空值,并根据结果对文本进行分组并创建.Mobile
Home
GroupId
所以你可以申请COALESCE(Mobile, Home)
和DENSE_RANK() OVER (ORDER BY
。
请找到带有示例数据的演示:
DECLARE @TestTable TABLE (Id INT, Mobile INT, Home INT);
INSERT INTO @TestTable (Id, Mobile, Home) VALUES
(1, NULL, 626456),
(2, 626456, NULL),
(3, 405123, NULL),
(4, NULL, 405123);
SELECT DENSE_RANK() OVER(ORDER BY COALESCE(Mobile, Home)) AS GroupId,
Id
FROM @TestTable
ORDER BY Id
这里我ORDER BY
根据COALESCE
结果使用,您可以根据您的业务需要进行更改。
推荐阅读
- codenameone - 从codenameone android扫描PDF417
- android - 更改许多控件的默认颜色
- spring-cloud - 如何在 QueueMessageHandler 中为 spring-cloud-aws 获得 javax.validation 有效负载验证?
- laravel - Laravel 编码实践 / 最优化的存储方法
- java - ksoap2 复杂参数 - SoapFault - 故障代码:'soap:Client' 故障字符串:
- node.js - 如何在 NodeJs 中打印字符串消息?
- r - 将线性模型应用于嵌套数据
- google-chrome - Puppeteer 页眉和页脚未显示在第一页
- android - Alarm Manager is sometimes very long to run the intent
- c++ - 在 CodeBlocks 中构建项目时“找不到此类文件或目录”