我有3栏将我的JOIN基于-> ID,帐户,客户。可以有多行包含相同的ID值。
我想在1)ID,2)帐户,3)保管箱上优先考虑我的JOIN。
因此,在下面的示例中,由于所有列均包含一个值,因此应在@UserData中填充的UserCode应该为'u11z'。
我该怎么做呢?到目前为止我的代码下面...
UPDATE @UserData
SET UserCode = ur.UserCode
FROM @UserData uA
INNER JOIN UserReference ur
ON uA.ID = ur.ID
AND ((ua.Account = ur.Account) OR (ur.Account = ur.Account))
AND ((ua.Cust = ur.Cust) OR (ur.Cust = ur.Cust))
用户参考表:
Cust Account ID UserCode
234 NULL 9A2346 u12x
234 Test 9A2346 u11z
NULL NULL 9A2346 u30s
@UserData表:
Cust Account ID UserCode
234 Test 9A2346 NULL
谢谢!
您可以尝试以下方法。我加入了表格,计算了比赛的数量,并对它们进行了排名。然后选择等级1。
; with userCte (userCodeA, userCodeB, rank)
as
(
select a.usercode, b.usercode,
rank() over (partition by a.id order by case when a.cust = b.cust then 1 else 0 end +
case when a.account = b.account then 1 else 0 end +
case when a.id = b.id then 1 else 0 end desc) as rank
from userdata a
join userreference b
on a.id = b.id or a.account = b.account or a.id = b.id
)
select * from userCte
--update userCte
--set userCodeA = userCodeB
where rank = 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句