我正在尝试将一个表合并到另一个表(我们将其称为 Stage 和 Prod)中,以控制用户及其权限。我的最终结果应该是一个单一的 Prod 表,它将每个用户 ID 的权限从 Stage 组合到 Prod 中。我遇到的问题是,这些表是由外部供应商设计的,并且在一个逗号分隔的列中包含多条信息。
舞台可能如下所示:
Userid | Permissions
----------------------------------------------------------------
1 | schedule,upload,test,download,admin
2 | test,upload
3 | download
产品:
Userid | Permissions
----------------------------------------------------------------
1 | test,admin,schedule,download,upload
2 | admin
3 | download,upload
合并后,用户 ID 应该拥有来自 Stage 的权限以及 Prod 中的权限。然而,当权限是逗号分隔的字符串时解决这个问题让我束手无策。
在下面的最终结果中,用户 ID 1 的权限保持不变,因为它们在 Stage 中与在 Prod 中相同,只是顺序不同。 用户 ID 2 已将其阶段权限添加到他的产品中,因为他还没有这些权限。 用户 ID 3 的 Prod 权限未更改,因为其 Stage 权限已包含在内。
结果:
Userid | Permissions
----------------------------------------------------------------
1 | test,admin,schedule,download,upload
2 | admin,test,upload
3 | download,upload
有什么办法可以做到这一点吗?希望这有一定道理,但如果有任何更多信息可能有帮助,我很乐意尝试提供。感谢您提供的任何帮助。
最佳答案
有趣的是,这是 MSSQLTips blog 上的一个讨论主题。通过 Aaron Bertrand 。借用他的代码,您可以创建完成以下工作所需的 Numbers
表和字符串拆分/重组函数。如果您计划经常这样做并且坚持使用所显示的架构,那么这就是您要走的路。
/*Create Test Data
create table StagePermissions (UserID int, [Permissions] nvarchar(max));
create table ProdPermissions (UserID int, [Permissions] nvarchar(max));
insert StagePermissions values
(1,'schedule,upload,test,download,admin'),
(2,'test,upload'),
(3,'download')
insert ProdPermissions values
(1,'test,admin,schedule,download,upload'),
(2,'admin'),
(3,'download,upload')
*/
select sp.UserID, dbo.ReassembleString(sp.Permissions+','+pp.Permissions,',',N'OriginalOrder') MergedPermissions
from StagePermissions sp
join ProdPermissions pp on pp.UserID=sp.UserID
关于sql-server - T-SQL 合并两个逗号分隔的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37710179/