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