0

我有一个需要帮助的编辑例程。我已将小于 10 的值编入名为“已编校的详细信息”的单行中。但是,在某些情况下,即使详细信息编辑列仍然小于 10,我必须返回并获取下一个最小数字以添加到编辑中,直到它大于 10。下一步是让我难过的事情。在我获取下一个最小值以进行编辑后,我需要删除导致此问题的行。问题是我此时没有数据集的自然键。

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

我有 2 张桌子正在使用。

    #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

上面的内容非常适合为每组数据查找下一个最低整数值并将其正确添加到我的 detailsRedacted 行中。但我无法弄清楚如何回到最小值的行并将其设置为 0。

由于声誉限制,我还不能添加图像……所以我无法向您展示数据的样子。也因为它本质上是敏感的,我不能在任何地方发布数据。

查看上面的一组数据,details redacted 列只有 5。我可以得到这组 13 中的值并将其添加到 details redacted 中。但是因为我只有 DashboardYear、Institution 和 StudentLevel 作为键,所以我无法访问定义导致编辑的单行所需的字段。

我只想做一个 update countofstudent = 0 select min(countofStudents) group by 子句并完成..但这并没有削减它。

希望有一个我还没有见过的忍者技巧可以帮助我。抱歉,我没有发布任何代码,但不确定它会有所帮助..

4

1 回答 1

0

使用 ROW_NUMBER() WITH PARTITION 和 GROUP BY

因此,在跟踪堆栈溢出之后,我意识到我只是在问错误的问题。我能够使用以下代码解决我的问题。

    ---------------------------------------------------------------
    --- 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 行。

于 2014-02-05T16:13:13.133 回答