【发布时间】:2017-03-14 23:08:56
【问题描述】:
假设我有一个表“东西”。 它有 3 列。
因此,经理和该经理下属的员工的工作代码应该相同(就像 jobcode= 000 一样)。那是正常的情况。 但是在某些情况下,经理将“ABC”作为工作代码。 在这些情况下,我需要将“ABC”替换为该经理下一位最近员工的工作代码值。 例如,对于经理 A1,我需要将他的工作代码 ABC 替换为 234,考虑到 B1 是他最近的员工。 对于经理 A,他的工作代码 ABC 将被替换为 121,因为 B 是他手下唯一的员工。
我写了这个查询,但它似乎不起作用。
Update X
Set X.JobCode=Y.JobCode
FROM STUFF X
INNER JOIN STUFF Y
ON X.MGRCODE=Y.MGRCODE
AND X.JOBCODE = 'ABC"
AND Y.JOBCODE = ( SELECT TOP 1 JOBCODE FROM STUFF WHERE EMPCODE<>Y.MGRCODE AND
Y.MGRCODE IN (SELECT MGRCODE FROM STUFF WHERE EMPCODE=MGRCODE AND JOBCODE='ABC')
【问题讨论】:
-
什么版本的sql server?为此,您可以使用
LEAD或带有ROW_NUMBER的CTE。此外,当使用TOP时,您需要一个ORDER BY来使其具有确定性 -
SQL Server 2008 R2。是的,我在 order by 子句中使用了一个更新日期。我想知道是否有任何方法可以通过简单的查询和连接来做到这一点?
标签: sql sql-server sql-server-2008 tsql join