[英]How can I write a Stored Procedure that will reorder numbered data according to a Status Column?
我有一个表,其中包含一个用于对数据进行排序的数字列,一个包含信息的文本字段以及一个状态列。
item_num item status
1 Plate new
2 Cup continued
3 Fork new
4 Spoon revised
当项目更新状态为“已停止”时,我需要列表重新排序item_num以将所有具有最大编号的“已停止”状态的项目重新排序,并相应地重新排序其他项目。 所以,如果我停止Cup,我需要一个存储过程来更新表格,从而产生以下结果:
item_num item status
1 Plate new
2 Fork new
3 Spoon revised
4 Cup discontinued
我只需要一些关于如何更新数据和按状态重新排序的方向。
我正在使用Microsoft SQL Server。 item_num不是主键。 我遇到的问题是我对我能做的事情有限,因为我不能对表本身进行任何更改,它必须是一个存储过程,并且它可以更改这些数字。 这是EHR中的治疗计划目标。 生成治疗计划文档时,它按目标编号(item_num)列出目标。 因此,如果用户中断目标,则编号错误。 治疗计划未显示“已停止”的目标。 所以目标从1,2,3,4变为1,2,4(如果我停止了第3个目标)。
我是电子健康记录系统前端的开发人员。 当用户单击按钮时,需要触发此存储过程。 这个网站对我很有帮助,但这是我的第一篇文章 - 我知道我可能会破坏它。 道歉。
只要所有行都是distinct
,您就可以使用ROW_NUMBER()
来实现此目的。 如果不是,您将需要某种键来处理join
。
首先将所有内容放在临时表中并创建新的item_num
SELECT item_num, item, status,
ROW_NUMBER() over (ORDER BY CASE WHEN STATUS = 'Discontinued'
THEN 2 ELSE 1 END) as 'newnum'
INTO #TEMP
FROM TABLE
然后JOIN
您的临时到主,并更换旧的item_num
与newnum
UPDATE ta
SET ta.item_num = t.newnum
FROM table ta
JOIN #temp t on t.item_num = ta.item_num
AND t.item = ta.item
AND t.status = ta.status
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.