Rumah > pangkalan data > Oracle > teks badan

oracle怎么多行转一行

WBOY
Lepaskan: 2022-03-07 15:12:46
asal
22362 orang telah melayarinya

在oracle中,可以利用listagg函数配合“order by”子句实现多行转一行,该语句可以对数据进行排序,然后将排序的结果拼接起来,语法为“listagg (列名,‘分隔符’) within group(order by 列名)”。

oracle怎么多行转一行

本教程操作环境:Windows10系统、Oracle 11g版、Dell G3电脑。

oracle怎么多行转一行

由于需要,需要将获取到的机构组织下的子组织组成一行数据,使用到了Oracle自带的函数

listagg (列名,‘分隔符’) within group(order by 列名)

即在每个分组内,LISTAGG根据order by子句对列植进行排序,将排序后的结果拼接起来

我的组织结构是个树形结构,下面的SQL则是查询出当前部门下的所有子部门的名称。

SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4
Salin selepas log masuk
Salin selepas log masuk

注:上面的SQL用到了Oracle的关键字LEVEL,它表示了树形结构中的数据在哪个层级
上面SQL还用到了Oracle树形查询语句START WITH … CONNECT BY PRIOR …
若查询的是该节点的所有父节点,则上面START WITH SQL应该改为:
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.PID = O.ORGID (PRIOR后面的字段与先前的顺序不一样)

ORGANIZATION表数据如下

ORGID ORGNAME PID
1000 小学 0
1100 一年级 1000
1200 二年级 1000
1101 101班 1100
1102 102班 1100
1103 103班 1100
1201 201班 1200

1.LEVEL

SELECT ORGNAME,LEVEL FROM ORGANIZATION 
START WITH ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID
Salin selepas log masuk

执行结果如下

ORGNAME LEVEL
小学 1
一年级 2
二年级 2
101班 3
102班 3
103班 3
201班 3

2.LISTAGG…WITHIN GROUP…

SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
Salin selepas log masuk

执行结果如下:
小学,一年级,二年级,101班,102班,103班,201班

3.将父节点下的所有子节点拼成一行

SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4
Salin selepas log masuk
Salin selepas log masuk

执行结果如下:
小学,一年级,二年级,101班,102班,103班,201班

推荐教程:《Oracle视频教程

Atas ialah kandungan terperinci oracle怎么多行转一行. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!