在更新中引用另一个表的一个表中按从高到低的SQL顺序
嘿,我有以下表格,这些表格需要从一个匹配另一个的表格中获取数据,并根据TempVersion的int值从高到低排列在更新中引用另一个表的一个表中按从高到低的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
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