SQL生成文档编号:MDK为0时修改DocNum的查询语句咨询
解决方法
根据你的需求——当MDK列的值为0时,按idn4排序生成DocNum字段,你当前的查询逻辑刚好和需求相反,只需要调整CASE语句的判断条件即可:
SELECT [idn4], [MDK], CASE WHEN [MDK] = 0 THEN ROW_NUMBER() OVER (ORDER BY [idn4]) ELSE NULL END AS DocNum FROM 你的表名;
说明
- 该语句会为所有
MDK=0的行,按照idn4的顺序生成连续的序号作为DocNum; - 对于
MDK≠0的行,DocNum会返回NULL,匹配你“仅在MDK变为0时修改DocNum”的需求。
如果你的实际需求是以MDK=0作为分组节点,每个分组内按idn4排序重新编号(比如每遇到一个MDK=0就开启新的计数序列),可以使用带分区逻辑的窗口函数实现:
SELECT [idn4], [MDK], CASE WHEN [MDK] = 0 THEN ROW_NUMBER() OVER (PARTITION BY 分组标识 ORDER BY [idn4]) ELSE NULL END AS DocNum FROM ( -- 生成分组标识:每遇到MDK=0则创建一个新分组 SELECT *, SUM(CASE WHEN [MDK] = 0 THEN 1 ELSE 0 END) OVER (ORDER BY [idn4]) AS 分组标识 FROM 你的表名 ) AS t;
内容的提问来源于stack exchange,提问作者manoochehr gharooni
相关产品推荐
相关产品推荐

