sql - 增加 i 条件
问题描述
每当 v_id 的值不同时,我想将 i 增加 1。
i = 1;
for i in 1..10 loop
SELECT subject_details.NEXTVAL
INTO v_id
FROM dual;
INSERT INTO employee (id, subject)
VALUES (i,v_id);
i = i + 1;
end loop;
这是做什么的
id subject
1 3647
2 3647
3 5678
4 5678
5 5678
但我想要的是每当“v_id”的值发生变化时将“i”的值增加1
id subject
1 3647
1 3647
2 5678
2 5678
2 5678
解决方案
我认为您可以使用dense_rank()
:
select t.*, dense_rank() over (order by subject)
from t;
如果这些值可以交错,那么您可以使用lag()
和累积和:
select t.*,
sum(case when prev_subject = subject then 0 else 1 end) over (order by id)
from (select t.*,
lag(subject) over (order by id) as prev_subject
from t
) t;
推荐阅读
- flutter - 如何让 willPopScope 返回不退出应用程序,颤抖
- reactjs - 如何在下一个为静态站点生成 (SSG) 页面实施 i18n 本地化
- typescript - Promise 类型不存在属性“$auth”
- python - Kubernetes 官方教程:http://localhost:6000/ 的网页可能暂时关闭或永久移动到新的网址
- pandas - 根据另一个数据框python pandas替换列值?(初学者)
- java - 如何退出此方法?
- c# - 将异步 api 调用结果与请求匹配
- excel - 返回错误的用户名,缺少单引号
- php - 每天运行一次PHP函数并缓存加载的文件
- javascript - 如何在javascript中将数组转换为树结构