Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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顺序_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

在更新中引用另一个表的一个表中按从高到低的SQL顺序

在更新中引用另一个表的一个表中按从高到低的SQL顺序,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,嘿,我有以下表格,这些表格需要从一个匹配另一个的表格中获取数据,并根据TempVersion的int值从高到低排列 UPDATE net_Users SET net_Users.DefaultId = b.TId FROM (SELECT TOP 1 IndivId, TId FROM UTeams WHERE UTeams.[Active] = 1 ORDER B

嘿,我有以下表格,这些表格需要从一个匹配另一个的表格中获取数据,并根据TempVersion的int值从高到低排列

UPDATE
    net_Users
SET
    net_Users.DefaultId = b.TId
FROM
    (SELECT 
        TOP 1 IndivId, 
        TId 
     FROM 
        UTeams 
     WHERE 
        UTeams.[Active] = 1 
     ORDER BY 
        TempVersion DESC
    ) AS b
WHERE
    net_Users.IndivId = b.IndivId 
在上面的例子中,我试着从最高的TempVersion到最低的顺序

上面的查询似乎只是用TempVersion更新了其中的1条记录,并在那里停止。我需要它循环查找所有具有相同individid匹配的关联用户

有人能帮我解决这个问题吗

样本数据

网络用户:

name    | DefaultId | IndivId | etc...
--------+-----------+---------+-------
Bob     |           | 87      | etc...
Jan     |           | 231     | etc...
Luke    |           | 8       | etc...
联合团队:

IndivId | TempVersion | etc...
--------+-------------+-------
8       | 44          | etc...
17      | 18          | etc...
8       | 51          | etc...
8       | 2           | etc...
7       | 22          | etc...
8       | 125         | etc...
87      | 10          | etc...
14      | 88          | etc...
8       | 5           | etc...
15      | 54          | etc...
65      | 11          | etc...
87      | 15          | etc...
39      | 104         | etc...
我需要的输出是(选择Individ8):

在网络用户中:

Name | DefaultId | IndivId | etc...
-----+-----------+---------+-------
Luke | 125       | 8       | etc...
Luke | 51        | 8       | etc...
Luke | 44        | 8       | etc...
Luke | 5         | 8       | etc...
Luke | 2         | 8       | etc...

我想这就是你想要做的:

update net_Users
  set net_Users.DefaultId = coalesce((
    select top 1 TId
    from UTeams
    where UTeams.[Active] = 1
      and net_Users.IndivId = UTeams.IndivId
    order by u.TempVersion desc
    )
    ,net_Users.DefaultId
    )
另一种使用

另一种方法是使用and


请提供示例数据和所需结果。代码中TOP 1的用途是什么?用示例更新了OP。
tid
[active]
去哪里了?@StealthRT很乐意帮助!
update n
  set DefaultId = coalesce(x.Tid,n.DefaultId)
from net_Users as n
cross apply (
  select top 1 TId
  from UTeams as u
  where u.[Active] = 1
    and n.IndivId = u.IndivId
  order by u.TempVersion desc
) as x
with cte as (
  select 
    n.IndivId
  , n.DefaultId
  , u.Tid
  , rn = row_number() over (
      partition by n.IndivId 
      order by TempVersion desc
      )
  from net_users as n
    inner join UTeams as u
      on n.IndivId = u.IndivId
  where u.[Active]=1
)
update cte
set DefaultId = Tid
where rn = 1