【发布时间】:2021-05-05 08:14:26
【问题描述】:
我们有一个人力资源系统,其中人员被分配到多达 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'
【问题讨论】:
-
当然,我的错。我更新了信息,它在 MS-SQL 2017 上运行。
标签: sql duplicates sql-server-2017