我的疑问:
select school, rating, name
from mytable
where school = 'SchoolN';
结果:
+--------+------+-----+ |School |Rating|Name | +--------+------+-----+ |SchoolN | A |Name1| |SchoolN | B |Name2| |SchoolN | A |Name3| |SchoolN | A |Name4| |SchoolN | A |Name5| |SchoolN | B |Name6| |SchoolN | B |Name7| |SchoolN | B |Name8| |SchoolN | B |Name9| +--------+------+-----+
我想要的是这样的名字:
+--------+------+---------+ |School |Rating|Name | +--------+------+---------+ |SchoolN | A |i-Name1 | |SchoolN | B |i-Name2 | |SchoolN | A |ii-Name3 | |SchoolN | A |iii-Name4| |SchoolN | A |iv-Name5 | |SchoolN | B |ii-Name6 | |SchoolN | B |iii-Name7| |SchoolN | B |iv-Name8 | |SchoolN | B |v-Name9 | +--------+------+---------+
我试过:
select school, rating,
case when rownum = 1 then 'i-' || name
when rownum = 2 then 'ii-' || name
when rownum = 3 then 'iii-' || name
when rownum = 4 then 'iv-' || name
when rownum = 5 then 'v-' || name
end Name
from mytable
where school = 'SchoolN';
但结果是错误的:
+--------+------+---------+ |School |Rating|Name | +--------+------+---------+ |SchoolN | A |i-Name1 | |SchoolN | B |ii-Name2 | |SchoolN | A |iii-Name3| |SchoolN | A |iv-Name4 | |SchoolN | A |v-Name5 | |SchoolN | B |Name6 | |SchoolN | B |Name7 | |SchoolN | B |Name8 | |SchoolN | B |Name9 | +--------+------+---------+
您可以使用中的罗马数字格式说明符
RN
来指定字符
SELECT
level as n,
TO_CHAR(level,'RN') as roman
FROM
dual
CONNECT BY
level <= 10;
N ROMAN
---------- ---------------
1 I
2 II
3 III
4 IV
5 V
6 VI
7 VII
8 VIII
9 IX
10 X
10 rows selected.
因此,在APC的查询中,您可以执行to_char(rn,'RN')||name as name
ROWNUM只是结果集中的行数。您实际需要的是每个等级
中name
的数目。所以这意味着你需要一个像row_number()
这样的分析函数:
with cte as (
select school, rating, name,
row_number() over (partition by school, rating order by name) as rn
from mytable
)
select cte.school,
cte.rating,
case when cte.rn = 1 then 'i-' || name
when cte.rn = 2 then 'ii-' || name
when cte.rn = 3 then 'iii-' || name
when cte.rn = 4 then 'iv-' || name
when cte.rn = 5 then 'v-' || name
end Name
from cte
where cte.school = 'SchoolN'
;
这是生成所需结果集所需对代码进行的最小更改。我建议您也加入@KaushikNayak建议,并部署rn
格式掩码,因为这将使您的代码更加紧凑,不那么脆弱:
...
select cte.school,
cte.rating,
to_char(cte.rn, 'rn')|| '-' || name as Name
from cte
...
通过小写的格式掩码('rn'
),得到小写的输出:i
,ii
等。
您可以使用字符转换功能(到字符
)的fmRM
格式模型选项使用densite\u rank()
:
select t.school,
t.rating,
to_char(dense_rank() over(partition by rating order by name), 'fmrm')
|| '-' ||t.name name
from mytable t
order by t.name;
SQL小提琴演示
此代码正在触发错误 无效的sql对象。 从文档中我觉得表中的任何对象都是sql对象<这里怎么了? 在Oracle 10G中考虑以下函数 在10G上下文中考虑以下函数 我得到了一个错误的无效对象 我的桌子就像 此表位于“测试”模式中,我与SCOTT有联系,SCOTT有“测试时授予选择权”。测试表到scott's 我还是会出错 ERR_INVALID_OBJECT
我知道这相对简单,但我无法在归档中找到解决方案,尽管我看到了类似的解决方案,但我的SQL不足以对它们进行反向工程。 我所要做的就是从呼叫管理表中,按周分组计算团队中发出的呼叫数。下面是一个返回30000多个条目的代码示例。如果可能的话,我想把这个数字分为几周,也可以根据周五到周五的范围分为几天? 关键领域是 表名称是 这样我就可以创建一个列表,列出该支持组每周记录的通话次数 所以很简单,但是我可以
我有一个大约15万行的表,我必须使用JavaQuartz Scheduler一次获取1000行。要求是一次限制1000行,然后再限制1000行等(与MySQL限制查询相同)。 我正在使用以下查询: 问题是上面的查询返回了我在结果集中不需要的额外列rownum,因为返回的数据被传递给MapListHandler(),后者返回将结果转换为JSON,并且我将此JSON传递给不期望额外rownum列的We
在Crystal Reports中,我使用以下查询(针对Oracle数据库)为报表中的单个字段生成数据: 这可以很好地工作,并基于提供的{HB_As_At_Date}(the{?}语法是Crystal将参数值嵌入SQL(SQL)的方法。不过,上述查询的内容不是我的问题——我想做的是在几个不同的日期重复运行它,并将输出输入Crystal以供在报告中使用。 假设我希望在9月的每个星期一运行这个查询,我
Wego DBWeb Godaily - github FXH Blog Gos Gobook
Gitea - github.com/go-gitea/gitea Gogs - github.com/gogits/gogs grafana - github.com/grafana/grafana Go语言中文网 - github.com/studygolang/studygolang github.com/m3ng9i/qreader Wego Docker.cn Xorm Adapter
Gitea - github.com/go-gitea/gitea Gogs - github.com/gogits/gogs grafana - github.com/grafana/grafana Go语言中文网 - github.com/studygolang/studygolang github.com/m3ng9i/qreader Wego Docker.cn Xorm Adapter
更新日期:2018/8/15 适用软件及版本:mblock V5.0.0-beta.4 1. 用按钮切换小程的表情 1) 拖取一个事件类积木 当按下按钮() 到脚本区,保留默认值。 2) 添加一个播放类积木 播放声音(),选择“开关”。 3) 添加一个显示类积木 显示图案(),保留默认图案。 4) 点击”上传到设备“将程序上传到小程。 5) 按下按钮A看看小程的表情吧! 2. 用小程制作点阵动画