Sql server 更新TSQL中数据子集的最小值

Sql server 更新TSQL中数据子集的最小值,sql-server,tsql,join,subquery,redaction,Sql Server,Tsql,Join,Subquery,Redaction,我有一个需要帮助的编校程序。我已将小于10的值编辑成一行,称为详细信息编辑。然而,在某些情况下,即使是“详细信息”编辑列也仍然小于10,我必须返回并获取要添加到编辑中的下一个最小值,直到它大于10为止。下一步是让我难堪的。在抓取下一个最小值进行编校之后,我需要删除导致该编校的行。问题是我现在没有数据集的自然键 正在考虑在每个子集上使用光标,但如果可以的话,我希望避免这种情况 我有两张桌子在用 #WorkingTable ( DashboardYear varchar()

我有一个需要帮助的编校程序。我已将小于10的值编辑成一行,称为详细信息编辑。然而,在某些情况下,即使是“详细信息”编辑列也仍然小于10,我必须返回并获取要添加到编辑中的下一个最小值,直到它大于10为止。下一步是让我难堪的。在抓取下一个最小值进行编校之后,我需要删除导致该编校的行。问题是我现在没有数据集的自然键

正在考虑在每个子集上使用光标,但如果可以的话,我希望避免这种情况

我有两张桌子在用

    #WorkingTable ( DashboardYear varchar()
                    , Institutition varchar()
                    , StudentLevel varchar()
                    , Field varchar()
                    , FieldDescription varchar()
                    , CountOfStudents varchar()
                   )
    #RedactedValues( DashboardYear Varchar()
                     , Institution Varchar()
                     , StudetnLevel Varchar()
                     , Field Varchar()
                     , FieldDescription Varchar()
                     , CountOfStudents Varchar()
                    )
    Insert INTO #RedactedValues
           SELECT DashboardYear
                  , Institution
                  , StudetnLevel
                  , Field
                  , FieldDescription
                  , CountOfStudents
             From #WorkingTable
           WHERE (CAST(CountOfStudents AS INT) < 10 and CAST(CountOfStudents AS INT) > 0)
             and Field = 'XXXX'
     -- Find Next Lowest Value for each group and add to redacted total
     UPDATE #RedactedValues
        SET CountOfStudents = CAST(r.CountOfStudents AS INT) + CAST(nextValue.nextValueToRedact AS INT)
     FROM
         (SELECT  DashboardYear
                  , Institution
                  , StudentLevel
                  , MIN(CAST(CountOfStudents AS INT)) AS nextValueToRedact
            FROM #WorkingTable t
           WHERE CAST(t.CountOfStudents AS INT) > 0
             and t.Field <> 'XXXX'
             and t.fieldDescription not like '%unknown'
          GROUP BY DashboardYear, Institution, StudentLevel
          ) nextValue
       JOIN #RedactedValues r
         on r.DashboardYear = nextValue.DashboardYear
        and r.Institution = nextValue.Institution
        and r.StudentLevel = nextValue.StudentLevel
上述方法非常适用于为每组数据查找下一个最低整数值,并将其正确添加到my Details数据行。但是我不知道如何返回到最小值所在的行并将其设置为0

由于声誉限制,我无法添加图像。。。因此,我无法向您展示数据的外观。也因为它是敏感的性质,我不能张贴在任何地方的数据

查看上述数据集,编辑的详细信息列仅为5。我可以得到这组13中的值,并将其添加到已编辑的详细信息中。但因为我只有DashboardYear、Institution和StudentLevel作为键,所以我无法访问定义有助于编校的单行所需的字段

我只想做一个updatecountofstudent=0选择mincountofstudentsgroupby子句并完成。。但这并不是削减它


希望有一个我还没见过的忍者把戏可以帮助我。很抱歉,我没有发布任何代码,但不确定它是否有帮助

使用带分区的行数和分组依据

所以在检查堆栈溢出后,我意识到我只是问了一个错误的问题。我能够通过使用以下代码修复我的问题

    ---------------------------------------------------------------
    --- Zero added redacted row
    ---------------------------------------------------------------
    WITH e AS 
    (
    SELECT w.DashboardYear
    , w.Institution
    , w.StudentLevel
    , w.Field
    , w.CountOfStudents
    , ROW_NUMBER() OVER
            (PARTITION BY w.DashboardYear
                            , w.Institution
                            , w.StudentLevel
        ORDER BY CAST(w.CountOfStudents AS INT)) ROW

    FROM #WorkingTable w
    JOIN #RedactedValues r
      ON w.dashboardYear = r.DashboardYear
     AND w.Institution = r.Institution
     AND w.studentLevel = r.studentlevel
    WHERE w.field <> @RedactedFieldValue        
      AND w.countofstudents > 0
      AND w.fielddescription NOT LIKE 'Unknown'
    )



    UPDATE #WorkingTable
    SET CountOfStudents = '0'
    FROM e
    JOIN #WorkingTable w
      ON e.dashboardYear = w.dashboardyear
     AND e.institution = w.institution
     AND e.studentlevel = w.studentlevel
     AND e.field = w.field
    WHERE row = 1
通过添加一个行号分区并按计数排序,我可以推断给定数据组的下一个最低值总是第1行