Sql 从数据库表列中以逗号分隔的字符串获取记录

Sql 从数据库表列中以逗号分隔的字符串获取记录,sql,sql-server,Sql,Sql Server,我有一个表,其中有一个字段“SendPDF”varchar(max)。在该列中,我有如下值 3065-Employee,1206-Company Admin 3065-Employee 1206-Company Admin,265-Employee,1324-Company Admin ........ 3065员工这意味着3065是员工Id,1206是公司管理员Id,其他记录也是如此。现在我想要的是,我需要根据他们的用户类型(即雇员或公司管理员)获取姓名。因此,上述记录的结果将是 Ajay

我有一个表,其中有一个字段“SendPDF”varchar(max)。在该列中,我有如下值

3065-Employee,1206-Company Admin
3065-Employee
1206-Company Admin,265-Employee,1324-Company Admin
........
3065员工这意味着3065是员工Id,1206是公司管理员Id,其他记录也是如此。现在我想要的是,我需要根据他们的用户类型(即雇员或公司管理员)获取姓名。因此,上述记录的结果将是

Ajay Sharma, Mahesh Singh
Ajay Sharma
Mahesh Singh, Rajesh Tiwari, Ramesh Vyas
....

如何准备查询?

您不应该将此类列表存储在逗号分隔的字段中。它们应该在一个包含多列的连接表中,一列用于员工id,另一列用于职务。SQL有一种很好的数据类型来存储事物列表。它被称为表而不是字符串

有时,我们会被其他人的糟糕设计决策所困扰。你应该设法把这个修好。假设您有一个表,例如
employees
,每个员工id和nam有一行,您可以执行以下操作:

select bt.*, e.employeename
from brokentable bt join
     employees e
     on ',' + bt.sendPDF like '%,' + cast(e.employeeid as varchar(max)) + '-';

这将为每个员工生成一行。您应该远离逗号分隔的列表,这样现在就足够了。

您必须用逗号“,”分隔字符串,然后加入

在SQL Server中,按特定字符拆分字符串不能以本机方式完成,您必须使用用户定义的函数,internet上有许多示例,但这里是开始介绍的

您可以这样使用它:

    WITH tmp AS (
        SELECT * FROM Split(SendPDF,',')
    ) SELECT name FROM employees JOIN tmp2 ON tmp.Item = CAST(employees.id AS VARCHAR)+'-Employee' 
    UNION
    SELECT name FROM CompanyAdmins JOIN tmp2 ON tmp.Item = CAST(CompanyAdmins.id AS VARCHAR)+'-Company Admin'

这不是一个优雅的解决方案,它只是你可以做的事情来完成你的工作。你应该像其他人说的那样规范化你的数据。

你可以发布output@mohan111,我已编辑了问题以获得所需的结果。请首先规范化您的数据库:存储ID的方案就是出现此问题的原因。我同意您@DavidSoussan的观点,但目前我无法更改该方案,你能给我建议一个解决方案以获得所需的输出格式的记录吗?
员工和
公司管理员是否存储在两个不同的表中?你是对的,你能告诉我关于“cat()”的最新情况吗?这应该是一个函数,或者这是“cast”,对吗?@nrsharma应该是
cast()