作用:以逗号分隔连接列的值
oracle 10g引入。使用时直接用
以下介绍一些实际使用的状况。介绍实际Case前先建立一个测试table和一些测试数据。
两张表: employee,prject;属性如下
1)employee: 员工ID号,员工名,部门
测试数据
0001 user1 IT
0002 user2 IT
2)prject:项目ID号,负责的员工ID号
测试数据
PN001 0001
PN002 0001
PN003 0001
PN004 0001
PN010 0002
PN011 0002
对应的SQL如下
createtableemployee
(
ID varchar(4)NOTNULLPRIMARYKEY,
NAMEvarchar(20),
DEPT varchar(20)
);
createtableprject
(
PROJECTID varchar(5)NOTNULLPRIMARYKEY,
OWNERID varchar(20)
);
INSERTINTOemployee(ID,NAME,DEPT)Values(‘0001’,‘user1’,‘IT’);
INSERTINTOemployee(ID,NAME,DEPT)Values(‘0002’,‘user2’,‘IT’);
INSERTINTOprject(PROJECTID,OWNERID)Values(‘PN001’,‘0001’);
INSERTINTOprject(PROJECTID,OWNERID)Values(‘PN002’,‘0001’);
INSERTINTOprject(PROJECTID,OWNERID)Values(‘PN003’,‘0001’);
INSERTINTOprject(PROJECTID,OWNERID)Values(‘PN004’,‘0001’);
INSERTINTOprject(PROJECTID,OWNERID)Values(‘PN010’,‘0002’);
INSERTINTOprject(PROJECTID,OWNERID)Values(‘PN011’,‘0002’);
Case 1: 列转换行。 以一行显示所有员工的名字
select
结果: user1,user2
Case 2: join 两张table , 计算员工负责的 项目个数的例子.
selectt1.ID,t1.DEPT,t2.pcountfrom
(selectID,NAME,DEPTfromemployee) t1leftouterjoin
(selectOWNERID,trunc(length(replace(‘,’,”))/5)aspcountfromprjectgroupbyOWNERID) t2ont1.ID = t2.OWNERID;
结果:
0001 IT 4
0002 IT 2
此Case如果使用Count替代的话也可以,而且写法更简单,但是table很复杂的时候使用count不能达成时,可以考虑这个方式, 此处附上count方式
selectt1.ID,t1.DEPT,t2.pcountfrom
(selectID,NAME,DEPTfromemployee) t1leftouterjoin
(selectOWNERID,count(PROJECTID)aspcountfromprjectgroupbyOWNERID) t2ont1.ID = t2.OWNERID;