sql - Oracle SQL:按组和子条目枚举行
问题描述
我有一张这样的桌子
Question_Id Question_text Question_Answer_id Date
------------ -------------- ------------------ --------
1 First Question 1-1-2021
2 First Answer 1 2-1-2021
3 Second Answer 1 3-1-2021
4 Random Question 4-1-2021
5 Random Answer 4 5-1-2021
6 Another Answer 4 6-1-2021
我需要显示类似以下 SELECT
Question_Id Question_text Question_Answer_id Date Order
------------ -------------- ------------------ -------- --------
1 First Question 1-1-2021 001
2 First Answer 1 2-1-2021 001.001
3 Second Answer 1 3-1-2021 001.002
4 Random Question 4-1-2021 002
5 Random Answer 4 5-1-2021 002.001
6 Another Answer 4 6-1-2021 002.002
我需要使用 SELECT 显示新订单,此订单列基于具有答案 ID 的条目。我尝试使用函数 Row_number() 但我无法正确使用它。
订单不是另一张桌子
我该如何进行这种类型的枚举?
解决方案
假设您的层次结构只有两个深度(这对问题/答案有意义),您可以使用窗口函数。特别是,您可以使用dense_rank()
为问题分配一个编号,然后dense_rank()
再为每个问题中的答案分配一个编号。剩下的只是格式化最终的字符串:
select t.*,
(lpad(dense_rank() over (order by coalesce(t.Question_Answer_id, t.question_id)), 3, '0') ||
(case when t.Question_Answer_id is not null
then '.' || lpad(dense_rank() over (partition by t.Question_Answer_id order by t.question_id), 3, '0')
end))
from t
order by question_id;
这是一个 db<>fiddle。
推荐阅读
- json - 访问 json 模式中另一个对象的枚举值
- r - 使用 R 语言在 Shiny 中绘制实时图表
- ffmpeg - ffmpeg mp4 到 hls 类似持续时间的块
- android - 安卓服务暂停
- jquery - 如何在jquery中获取视频高度
- jenkins - 在使用 Jenkinsfile 等待节点之前发布构建状态
- openshift - Openshift Origin 没有启动 webconsole
- azure - 访问 Azure 资源上的个人用户
- java - 如何使用 selenium 和 java 中的属性搜索元素
- xpath - XPATH 获取 glyphicon glyphicon-star