我正在使用几张桌子。 Employee表(tblEmployee),Managers表(tblManager)和管理器日志表(tblLog)。在日志表中有大约10列。第一列是经理ID。还有另一列具有要转移的员工的名字,以及该员工应该去哪个部门。以下是该列的快照:
Bob- Dept: 7 Meg- Dept: 5
Bob- Dept: 7 Meg- Dept: 5
Bob- Dept: 7 Meg- Dept: 5
Preston- Dept: 1
Martin- Dept: MANG Sue- Dept: MANG Sarah - DEPT: 8
Martin- Dept: MANG Sue- Dept: MANG Sarah - DEPT: 8
Martin- Dept: MANG Sue- Dept: MANG Sarah - DEPT: 8
Isabel- Dept: 6 Mike- Dept: 5
Isabel- Dept: 6 Mike- Dept: 5
Dan- Dept: MANG
Dan- Dept: MANG
如您所见,有重复的行。推荐Bob和Meg被转移的经理有3行作为他的ID。那是因为他在桌子上有3名员工,每个员工都有一排。我正在努力提取正在转移到管理层(MANG)或其他部门(#1-8)的员工。我有一个查询,它可以获取我需要的所有信息,但是它会将每个员工都记录在日志表中,它目前不会过滤掉额外的员工。所以说我要返回150行,实际上只有100个员工转移和50个其他员工因为不同的原因而在日志表中。
我试图提出一个查询,该查询采用员工的名字并检查它是否在列中,然后获取员工未来的部门编号(来自tblEmployee)并检查它是否与日志中的编号匹配柱。我查看了PARTINDEX
和REGEX,但我不够熟练,无法提出可以达到预期效果的解决方案
答案 0 :(得分:0)
就数据模型的细节而言,您的问题有点模糊。在尝试理解您的问题之后,我的建议是考虑重写您的数据模型,因为我个人认为在您想要计算此类查询时会有一些不足之处。
除此之外,我已经尝试根据您在问题中描述的内容猜测您的数据模型,并假设它是这样的:
CREATE TABLE tblLog(
ManagerID int,
log varchar(max)
)
INSERT INTO tbllog values
(1, 'Bob- Dept: 7 Meg- Dept: 5'),
(1, 'Bob- Dept: 7 Meg- Dept: 5'),
(1, 'Bob- Dept: 7 Meg- Dept: 5'),
(2, 'Preston- Dept: 1'),
(3, 'Martin- Dept: MANG Sue- Dept: MANG Sarah - DEPT: 8'),
(3, 'Martin- Dept: MANG Sue- Dept: MANG Sarah - DEPT: 8'),
(3, 'Martin- Dept: MANG Sue- Dept: MANG Sarah - DEPT: 8'),
(4, 'Isabel- Dept: 6 Mike- Dept: 5'),
(4, 'Isabel- Dept: 6 Mike- Dept: 5'),
(5, 'Dan- Dept: MANG'),
(5, 'Dan- Dept: MANG')
CREATE TABLE tblEmployee(
FirstName varchar(100)
)
INSERT INTO tblEmployee values
('Bob'), ('Meg'), ('Preston'), ('Martin'), ('Sue'), ('Sarah'), ('Isabel'), ('Mike'), ('Dan')
如果是这样,那么找到你想要的信息是相对微不足道的(尽管因为你存储数据的方式,计算效率低下)
DECLARE @vcDepartment VARCHAR(50) = 'MANG'
SELECT DISTINCT
tblLog.ManagerID,
tblEmployee.FirstName
FROM
tblLog,
tblEmployee
WHERE
tblLog.Log like '%' + tblEmployee.FirstName + '- DEPT: ' + @vcDepartment + '%'
OR tblLog.Log like '%' + tblEmployee.FirstName + ' - DEPT: ' + @vcDepartment + '%'
我已将答案放在一个sql小提琴中,以便您可以验证解决方案,并在需要时使用它:http://sqlfiddle.com/#!6/d22df/1/0
希望指出你正确的方向。