根据其他列的复杂条件更新SQL列

时间:2017-03-17 12:57:19

标签: sql-server tsql sql-update compare

我需要帮助找出如何根据另外两个标准更新SQL Server列中的值,并将while括在“foreach”中(我知道在T-SQL中没有foreach)循环。我设法获得SQL视图,包含所涉及的所有参数:

SQL View

抱歉,无法正常显示表格。

Here you can find a an example

我在这个特定情况下需要的是找到SamAccountNames,它们是多个组的成员(相同SamAccountName,具有不同的GroupID),比较此SAM的GroupStartDate并获得最早的约会。

此日期我将在存储过程中用于更新指定用户(SAM)的每个作业。

在这个特殊的例子中:TonyS是两个团体的成员(78和79),因此他有资格获得支票。当我检查GroupStartDate时,我发现Tony可以找到一份工作,最早开始于2017-03-06(具有UniqueID1的工作),所以在这种情况下我需要用这个日期更新Tony的其他工作(Job UniqueID2需要更新)。

我已经搜索并尝试了许多不同的东西,但到目前为止,我甚至无法接近必须做的事情。

任何点击都非常感谢。

此致 贝

1 个答案:

答案 0 :(得分:1)

您需要做的是按SamAccountName对记录进行分组,并获得最低GroupStartDate,这将是最早的""工作开始的日子。

-- get the ones with more than one groupId
;with multiple_groups_cte as
(
    select j.SamAccountName, count(distinct GroupId) nr_groups, MIN(groupstartdate) Earliest_GroupStartDate
    from #jobs j
    group by SamAccountName
    having count(distinct GroupId) > 1
)
select  SamAccountName, Earliest_GroupStartDate
from multiple_groups_cte

此查询将为您提供以下结果:

SamAccountName  Earliest_GroupStartDate

GarryT          2017-01-08 00:00:00.0000000
TonyS           2017-03-06 00:00:00.0000000