Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建使用联接或组的Update语句_Sql_Join - Fatal编程技术网

Sql 创建使用联接或组的Update语句

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,

作为一个更大的存储过程的一部分,我正在尝试编写一个SQL命令,以根据特定条件使用值更新特定字段。我遇到的问题是如何将联接与组链接

涉及3个表。初始表保存存储过程中主记录的ID,并包含唯一值

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很好的响应,已经测试了例程,非常感谢