Sql 姓。我们只使用第一个雇员的姓氏。员工姓名应为:'Carl&Jenny Malone'
正如您在我包含的示例查询中所注意到的,第二对夫妇不合适,因为它显示的是Sql 姓。我们只使用第一个雇员的姓氏。员工姓名应为:'Carl&Jenny Malone',sql,sql-server,tsql,Sql,Sql Server,Tsql,正如您在我包含的示例查询中所注意到的,第二对夫妇不合适,因为它显示的是Sherry&John-Wayne,而不是John&Sherry-Wayne *编辑:以下是我在脚本中包含的查询结果: 请帮帮我。谢谢。我不确定我是否完全理解你的要求。但我修改了您的查询如下(添加了一个内部案例): 或者(在您给出其他规格的评论之后)这个其他(我只修改了WHERE条件): select p.FirstName + ' ' + p.LastName as Employee, spouse.First
Sherry&John-Wayne
,而不是John&Sherry-Wayne
*编辑:以下是我在脚本中包含的查询结果:
请帮帮我。谢谢。我不确定我是否完全理解你的要求。但我修改了您的查询如下(添加了一个内部案例): 或者(在您给出其他规格的评论之后)这个其他(我只修改了WHERE条件):
select
p.FirstName + ' ' + p.LastName as Employee, spouse.FirstName + ' ' + spouse.LastName as Spouse, p.EmployedOn as pEmp, spouse.EmployedOn as sEmp
, o.PersonNode.GetAncestor(1) as pAncestor, @SupervisorNode as Ancestor, so.PersonNode.GetAncestor(1) as sAncestor,
CASE when spouse.PersonID is not null THEN p.FirstName + ' & ' + spouse.FirstName + ' ' + p.LastName
else p.FirstName + ' ' + p.LastName END as EmployeeName
--spouse.PersonID as SpouseID,
from #Person p
left join #PersonOrg o on p.PersonID = o.PersonID
left join #PersonRelationship pr on p.PersonID = pr.PersonID
left join #Person spouse on pr.RelatedPersonID = spouse.PersonID
left join #PersonOrg so on spouse.PersonID = so.PersonID
WHERE ((o.PersonNode.GetAncestor(1) = @SupervisorNode and (p.EmployedOn < spouse.EmployedOn OR spouse.PersonID is null))
)
OR ( so.PersonNode.GetAncestor(1) <> @SupervisorNode and p.EmployedOn >= spouse.EmployedOn )
ORDER BY p.ID
请,您能添加所需的结果吗?编辑了该问题。我希望避免嵌套案例,因为在成功获取正确名称后,我需要执行更多条件,以及使用嵌套案例(我已经知道如何使用嵌套案例),这就是为什么我没有将其包含在问题中的原因。因此,额外的嵌套案例会影响性能。不管怎样,谢谢。搞定了!^^,谢谢只需将
=
条件更改为
(不要认为会有重复的日期时间)。
CASE when spouse.PersonID is not null
THEN CASE WHEN o.PersonNode.GetAncestor(1)= @SupervisorNode THEN p.FirstName + ' & ' + spouse.FirstName + ' ' + p.LastName
ELSE spouse.FirstName + ' & ' + p.FirstName + ' ' + p.LastName
END
else p.FirstName + ' ' + p.LastName END as EmployeeName
select
p.FirstName + ' ' + p.LastName as Employee, spouse.FirstName + ' ' + spouse.LastName as Spouse, p.EmployedOn as pEmp, spouse.EmployedOn as sEmp
, o.PersonNode.GetAncestor(1) as pAncestor, @SupervisorNode as Ancestor, so.PersonNode.GetAncestor(1) as sAncestor,
CASE when spouse.PersonID is not null THEN p.FirstName + ' & ' + spouse.FirstName + ' ' + p.LastName
else p.FirstName + ' ' + p.LastName END as EmployeeName
--spouse.PersonID as SpouseID,
from #Person p
left join #PersonOrg o on p.PersonID = o.PersonID
left join #PersonRelationship pr on p.PersonID = pr.PersonID
left join #Person spouse on pr.RelatedPersonID = spouse.PersonID
left join #PersonOrg so on spouse.PersonID = so.PersonID
WHERE ((o.PersonNode.GetAncestor(1) = @SupervisorNode and (p.EmployedOn < spouse.EmployedOn OR spouse.PersonID is null))
)
OR ( so.PersonNode.GetAncestor(1) <> @SupervisorNode and p.EmployedOn >= spouse.EmployedOn )
ORDER BY p.ID
Employee Spouse pEmp sEmp EmployeeName
---------------------------------------- ---------------------------------------- ----------------------- ----------------------- ----------------------------------------
John Doe Jane Doe 2013-01-01 00:00:00.000 2013-01-02 00:00:00.000 John & Jane Doe
Sherry Wayne John Wayne 2012-01-12 00:00:00.000 2013-01-01 00:00:00.000 John & Sherry Wayne
Carl Malone Jenny Earhart 2013-01-01 00:00:00.000 2013-02-01 00:00:00.000 Carl & Jenny Malone
Tom No Wife NULL 2013-01-01 00:00:00.000 NULL Tom No Wife
Cherry Irrelevant NULL 2013-01-01 00:00:00.000 NULL Cherry Irrelevant
Eric Morales NULL 2013-01-01 00:00:00.000 NULL Eric Morales
Sheldon Marley NULL 2013-01-01 00:00:00.000 NULL Sheldon Marley