繁体   English   中英

如何编写将根据状态列重新排序编号数据的存储过程?

[英]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_numnewnum

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM