如何解决从 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'
解决方法
我使用 IIF
运算符找到了解决方案。
SELECT
IIF(LEFT(OrgLvl1,1) = 1,OrgLvl1 + '; ','') +
IIF(LEFT(OrgLvl2,1) = 2,OrgLvl2 + '; ','') +
IIF(LEFT(OrgLvl3,1) = 3,OrgLvl3 + '; ','') +
IIF(LEFT(OrgLvl4,1) = 4,OrgLvl4 + '; ','') +
IIF(LEFT(OrgLvl5,1) = 5,OrgLvl5 + '; ','') +
IIF(LEFT(OrgLvl6,1) = 6,OrgLvl6 + '; ','') +
IIF(LEFT(OrgLvl7,1) = 7,OrgLvl7 + '; ','') AS 'OrgString'
FROM tableName
DB FIDDLE 上的演示
,看前面的,你可以这样做:-
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'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。