Sql 创建使用联接或组的Update语句
作为一个更大的存储过程的一部分,我正在尝试编写一个SQL命令,以根据特定条件使用值更新特定字段。我遇到的问题是如何将联接与组链接 涉及3个表。初始表保存存储过程中主记录的ID,并包含唯一值Sql 创建使用联接或组的Update语句,sql,join,Sql,Join,作为一个更大的存储过程的一部分,我正在尝试编写一个SQL命令,以根据特定条件使用值更新特定字段。我遇到的问题是如何将联接与组链接 涉及3个表。初始表保存存储过程中主记录的ID,并包含唯一值 wrec_id 1 2 3 4 第二个表可能包含链接到主表的条目 Work_id并充当到Person表的路由。 如果它不包含值或pers_id的值设置为0,则我需要“not Assigned”作为人名。 如果分配了多个人,那么我需要所有人的串联列表 wrec_id, pers_id 1,
wrec_id
1
2
3
4
第二个表可能包含链接到主表的条目
Work_id并充当到Person表的路由。
如果它不包含值或pers_id的值设置为0,则我需要“not Assigned”作为人名。
如果分配了多个人,那么我需要所有人的串联列表
wrec_id, pers_id
1, 1
1, 2
2, 1
3, 3
Person表包含存储过程中所需的条目
pers_id, Forename, Surname
1, For1, Sur1
2, For2, Sur2
3, For3, Sur3
上述示例的预期输出应如下所示:-
For1 Sur1 : For2 Sur2
For1 Sur1
For3 Sur3
Not Assigned
我尝试过各种组合的组和联接,但没有成功。欢迎任何帮助。在SQL Server中,您可以使用
XML路径表达式组合多行。在这种情况下,您可以使用类似的方式来显示分配给每个工作项目的人员。然后,根据您需要如何使用数据,您可以在SQL Server或调用应用程序中处理它。例如,如果您只想在调用应用程序中显示最终结果,那么可以使用XSLT以您想要的方式显示XML(如果您这样做,您可以将整个查询包装在XML的表达式中,并按您想要的方式显示)
如果您确实需要按照SQL Server中的数据显示数据,则可以执行以下操作:
select
wrec_id
,case
when
( select
' : ' + Persons.Forename + ' ' + Persons.Surname
from WorkAssignments
inner join Persons on
Persons.pers_id = WorkAssignments.pers_id
where
WorkAssignments.wrec_id = WorkProjects.wrec_id
for xml path('')
) is null then 'Not Assigned'
else
( select
' : ' + Persons.Forename + ' ' + Persons.Surname
from WorkAssignments
inner join Persons on
Persons.pers_id = WorkAssignments.pers_id
where
WorkAssignments.wrec_id = WorkProjects.wrec_id
for xml path('')
)
end AssignedPersons
from WorkProjects
不过,正如你所看到的,它开始变得有点难看。同样,如果可以,您可能希望将如何显示工作分配的细节留给调用应用程序,而不是直接在SQL Server中执行。您实际上是在更新数据,还是只需要显示分配给项目的人员的查询?另外:您正在使用什么RDM?每个RDMS都有不同的策略来按照您希望的方式连接记录。我将使用UPDATE g set g.[Users]=(选择…)更新一个临时表。RDMS是SQL Server 2008很好的响应,已经测试了例程,非常感谢