遇到产品时增加行号 - T SQL - 单个查询(不允许多个语句)

Posted

技术标签:

【中文标题】遇到产品时增加行号 - T SQL - 单个查询(不允许多个语句)【英文标题】:Increase Row Number when ever Product is encountered - T SQL - Single Query (More than one statement not allowed) 【发布时间】:2021-08-26 20:10:11 【问题描述】:

下面有个表格

ID  Vals
1   Product
2   Milk
3   Butter
4   Cheese
5   Yogurt
6   Product
7   Muesli
8   Porridge
9   Product
10  Banana

需要如下输出

RWNUM   ID  Vals
1       1   Product
1       2   Milk
1       3   Butter
1       4   Cheese
1       5   Yogurt
2       6   Product
2       7   Muesli
2       8   Porridge
3       9   Product
3       10  Banana

每次遇到 Product 时,RWNUM 列的值都会加一。

这需要在单个 TSQL 查询中实现。

欢迎提出任何想法。

【问题讨论】:

根据问题指南,请展示您尝试过的内容并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。请不要标记多个版本的 SQL Server,除非您特别需要两者的解决方案? 【参考方案1】:

看起来您想要“产品”的累积总和:

select t.*,
       sum(case when val = 'Product' then 1 else 0 end) over (order by id) as rwnum
from t;

【讨论】:

以上是关于遇到产品时增加行号 - T SQL - 单个查询(不允许多个语句)的主要内容,如果未能解决你的问题,请参考以下文章

sql sql查询时加行号

sql sql查询时加行号

T-SQL---多值模糊查询的处理

当Oracle中的字段值更改时增加行号

T-SQL FTS 包含单个字符“n”匹配数字

带有 order by 子句的 SQL 查询