sql - 从 SQL 中的多列创建去重字符串
问题描述
我们有一个人力资源系统,其中人员被安排在多达 7 个不同的组织级别。每个级别都显示在数据库中自己的列中(在 MS-SQL 2017 上运行)我想创建一个组织字符串,显示组织中的人员位置。但是 HR 系统正在重复值列与前一个值以填充所有列,因此如果我只是将这些值与一个简单的函数组合起来,那么字符串中充满了重复项,这样对于字符串的使用者来说不是很有用:
SELECT [OrgLvl1] + ';' + [OrgLvl2] + ';' + [OrgLvl3] + ';' + [OrgLvl4] + ';' + [OrgLvl5] + ';' + [OrgLvl6] + ';' + [OrgLvl7] as 'OrgString'
数据样本可能如下所示:
|-----------+-----------+-----------+-----------+-----------+-----------+-----------|
| OrgLvl1 | OrgLvl2 | OrgLvl3 | OrgLvl4 | OrgLvl5 | OrgLvl6 | OrgLvl7 |
|-----------+-----------+-----------+-----------+-----------+-----------+-----------|
| 1stLevel | 2ndLevel | 2ndLevel | 2ndLevel | 5thLevel | 6thLevel | 7thLevel |
| 1stLevel | 2ndLevel | 2ndLevel | 4thLevel | 5thLevel | 6thLevel | 6thLevel |
| 1stLevel | 2ndLevel | 2ndLevel | 4thLevel | 5thLevel | 6thLevel | 7thLevel |
|-----------+-----------+-----------+-----------+-----------+-----------+-----------|
我得到的结果是
1stLevel;2ndLevel;2ndLevel;2ndLevel;5thLevel;6thLevel;7thLevel
1stLevel;2ndLevel;2ndLevel;4thLevel;5thLevel;6thLevel;6thLevel
1stLevel;2ndLevel;2ndLevel;4thLevel;5thLevel;6thLevel;7thLevel
我想要的结果是这样的:
1stLevel;2ndLevel;5thLevel;6thLevel;7thLevel
1stLevel;2ndLevel;4thLevel;5thLevel;6thLevel
1stLevel;2ndLevel;4thLevel;5thLevel;6thLevel;7thLevel
所以我正在寻找一些方法来查看字符串中的前一个值并消除任何重复项。
更新:我用这个:
IIF([OrgLvl2] != [OrgLvl1], [OrgLvl2] + ';', '') +
IIF([OrgLvl3] != [OrgLvl2], [OrgLvl3] + ';', '') +
IIF([OrgLvl4] != [OrgLvl3], [OrgLvl4] + ';', '') +
IIF([OrgLvl5] != [OrgLvl4], [OrgLvl5] + ';', '') +
IIF([OrgLvl6] != [OrgLvl5], [OrgLvl6] + ';', '') +
IIF([OrgLvl7] != [OrgLvl6], [OrgLvl7] + ';', '') AS 'OrgString'
解决方案
看看以前的,你可以这样做: -
OrgLvl1 + ';' +
IIF(OrgLvl2 <> OrgLvl1, OrgLvl2 + ';', '') +
IIF(OrgLvl3 <> OrgLvl2, OrgLvl3 + ';', '') +
IIF(OrgLvl4 <> OrgLvl3, OrgLvl4 + ';', '') +
IIF(OrgLvl5 <> OrgLvl4, OrgLvl5 + ';', '') +
IIF(OrgLvl6 <> OrgLvl5, OrgLvl6 + ';', '') +
IIF(OrgLvl7 <> OrgLvl6, OrgLvl7 + ';', '')
AS 'OrgString'
推荐阅读
- python - 无法在python中写入文件
- node.js - 如何以编程方式删除多个 Firebase 数据库路径
- swift - SwiftUI 观察变化
- javascript - 如何在传单弹出 HTML 中调用 Javascript 函数
- python - 将列表项放在数据框的单独单元格中
- c++ - 为什么我的函数应该调用另一个函数时会自行终止?
- reactjs - 如何在 React Redux 中将多个调度操作映射到单个道具
- android - 如何在 react-native 中链接包
- javascript - 我不知道如何制作模态“设置按钮”组件
- java - Java Stream - 在过滤器中抛出异常并返回一个列表