根据指定项怎么把查询后的数据合并?

taotie1225 2009-03-11 06:53:16
表t有数据库记录如下:
题目序号 题目名称 题目类型 题目答案 答题人
1 最爱球队 多选 马刺 小明
1 最爱球队 多选 湖人 小明
2 最爱教练 多选 姐夫 小红
2 最爱教练 多选 禅师 小红
3 最爱裁判 多选 光头 小红

想得到的结果是
题目序号 题目名称 题目类型 题目答案 答题人
1 最爱球队 多选 马刺;湖人 小明
2 最爱教练 多选 姐夫;禅师 小红
3 最爱裁判 多选 光头 小红

请问sql怎么合并?
...全文
247 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
taotie1225 2009-03-12
  • 打赏
  • 举报
回复
呼唤达人,请看7楼
taotie1225 2009-03-12
  • 打赏
  • 举报
回复
根据一个字段group by是如上,如果是根据多个字段group by,但是出来的结果和我想要的不同。

select * from qc_subject_option where sid=40012;
1 40028 1 <div>A.1部</div> 0 40012 0
2 40029 2 <div>B.2部</div> 0 40012 0
3 40030 3 <div>C.3部</div> 0 40012 0
4 40031 4 <div>D.3部以上(请填写)</div> 1 40012 0

我要得到结果为

1 40012 0 <div>A.1部</div>;<div>B.2部</div>;<div>C.3部</div>
2 40012 1 <div>D.3部以上(请填写)</div>

但是我用了
select sid,isfill,substr(max(sys_connect_by_path(ocontent,';')),2) arr
from (
select sid,isfill,ocontent,row_number() over(order by ocontent) rn
from qc_subject_option where sid=40012
)
start with rn=1
connect by rn-1=prior rn
group by sid,isfill;

出来的结果是
1 40012 0 <div>A.1部</div>;<div>B.2部</div>;<div>C.3部</div>
2 40012 1 <div>A.1部</div>;<div>B.2部</div>;<div>C.3部</div>;<div>D.3部以上(请填写)</div>

怎么样才能得到我想要的结果?分不够可以加
taotie1225 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jdsnhan 的回复:]
你换个连接符

sys_connect_by_path(ocontent,';')
[/Quote]
果然换了连接符就可以,何解?
gxlineji 2009-03-11
  • 打赏
  • 举报
回复
如果只考虑实现,不考虑性能.可以考虑使用分析函数:lead(x) over(partition by xx order by xxx)

create table t (
ID NUMBER(2)
TITLE VARCHAR2(20)
TYPE VARCHAR2(8)
AWNER VARCHAR2(10)
PERSON VARCHAR2(10)
);

insert into t values(1,'最爱球队','多选','马刺,'小明');

insert into t values(1,'最爱球队','多选','湖人','小明');

insert into t values(1,'最爱球队','多选','湖x人','小明');

insert into t values(2,'最爱教练,'多选','姐夫','小明');

insert into t values(2,'最爱教练,'多选','禅师','小明');

insert into t values(3,'最爱裁判,'多选','光头','小明');


select id,title,type,rtrim(awner,',') awner,person
from(
select id,title,type,rn,
awner||','||lead(awner) over(partition by id order by id) awner,
person
from (
select id,title,type,
awner||','||lead(awner) over(partition by id order by id) awner,
row_number() over(partition by id order by id) rn ,
person
from t
)
where mod(rn,2)<>0
)
where rn=1
fuyou001 2009-03-11
  • 打赏
  • 举报
回复
我的是oracle 9i2的可以运行sys_connect_by_path(ocontent,';')
jdsnhan 2009-03-11
  • 打赏
  • 举报
回复
你换个连接符

sys_connect_by_path(ocontent,';')
taotie1225 2009-03-11
  • 打赏
  • 举报
回复
我的是oracle9i
select sid,ocontent from qc_subject_option where sid=40012;
得出以下结果
1 40012 <div>A.1部</div>
2 40012 <div>B.2部</div>
3 40012 <div>C.3部</div>
4 40012 <div>D.3部以上(请填写)</div>
按照你给的连接,我看了,写了
select sid,substr(max(sys_connect_by_path(ocontent,'/')),2) arr
from (
select sid,ocontent,row_number() over(order by ocontent) rn
from qc_subject_option where sid=40012
)
start with rn=1
connect by rn-1=prior rn
group by sid;
但是报错
ora-30004:when using sys_connect_by_path function,cannot have seperator as part of column value
sleepzzzzz 2009-03-11
  • 打赏
  • 举报
回复

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧