ORACLE数据库多行数据合并为1行的问题,急用

CSRQQYPHPCZLJYXMMCJYZXYDJJE2014-5-6201405070026111.2300硅3.12601280.0000954050.8544201... CSRQ QYPH PCZL JYXMMC JYZ XYDJ JE2014-5-6 201405070026 111.2300 硅 3.1260 1280.0000 954050.85442014-5-6 201405070026 111.2300 碳 3.4580 1280.0000 954050.85442014-5-6 201405070026 111.2300 磷 0.0770 1280.0000 954050.85442014-5-6 201405070026 111.2300 镍 6.7010 1280.0000 954050.85442014-5-6 201405070026 111.2300 铬 2.5940 1280.0000 954050.85442014-5-6 201405070026 111.2300 硫 0.2020 1280.0000 954050.8544如上所示的几行数据,其中CSRQ\QYPH\PCZL\XYDJ\JE的值都是一样的,只有JYXMMC和JYZ是不相同的,现在想要将几行数据合并为如下字段的一行:CSRQ QYPH PCZL 硅 碳 磷 镍 铬 硫 XYDJ JE其中,硅、碳、磷、镍、铬、硫的值是JYZ,另外就是JYXMMC的行数是不固定的,可能上表列出的少也可能多,需要是活动的根据查询出的结果生成,怎么实现啊.急求高手解答
有人说我排版乱,我看了看确实,直接传个图片好看

要实现的结果如下:
CSRQ QYPH PCZL 硅 碳 磷 镍 铬 硫 XYDJ JSJE
tj_angela的答案有些接近,但是我不知道JYXMMC的值有几个,是随机的,有可能有6行,也可能5行、7行的,而且JYXMMC的值也不是固定的,怎么来实现啊? 硅 碳 磷 镍 铬 硫是6个字段,数据有多少行就是多少个字段,名称还得是JYXMMC的值,而字段的值就是JYZ的值,求解。
展开
 我来答
badkano
2014-06-09 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885365
团长

向TA提问 私信TA
展开全部

你看看是不是这样的,你数据排版太混乱了

select csrq,qyph,pczl,wm_concat(jyxmmc),wm_concat(jyz),xydj,je from 表名 group by csrq,qyph,pczl,xydj,je

 ----------补充-----------

oracle跟sqlserver不一样,如果存储过程的话只能返回类似sqlserver中print那种

这样的话,不知道能符合你要求不

表名我起的test

create table test
(CSRQ varchar2(10),
QYPH varchar2(20),
pczl number(10,4),
jyxmmc varchar2(10),
jyz number(10,4),
xydj number(10,4),
je number(10,4))

insert into test values ('2014-5-6','201405070026',111.2300,'硅',3.1260,1280.0000,954050.8544);
insert into test values ('2014-5-6','201405070026',111.2300,'碳',3.4580,1280.0000,954050.8544);
insert into test values ('2014-5-6','201405070026',111.2300,'磷',0.0770,1280.0000,954050.8544);
insert into test values ('2014-5-6','201405070026',111.2300,'镍',6.7010,1280.0000,954050.8544);
insert into test values ('2014-5-6','201405070026',111.2300,'铬',2.5940,1280.0000,954050.8544);
insert into test values ('2014-5-6','201405070026',111.2300,'硫',0.2020,1280.0000,954050.8544);

执行

select 'csrq','qyph','pczl',replace(wm_concat(jyxmmc),',','    '),'xydj','je' from test
union all
select to_char(csrq),to_char(qyph),to_char(pczl),replace(to_char(wm_concat(jyz)),',',' '),to_char(xydj),to_char(je) from test 
group by to_char(csrq),to_char(qyph),to_char(pczl),to_char(xydj),to_char(je)


结果

更多追问追答
追问
你这样显示的结果不是我要的,我要的结果里,硅碳磷镍铬等每个都是一个单独的字段,JYZ结果也独立的等于每一个JYXMMC,你看这怎么实现啊?
追答

日期那改好了,然后也把上边的优化了下,如果tmp表存在,自动删除重建

declare 
v_sql varchar2(2000);
v_str varchar2(2000);
v_count int;
begin
select count(*) into v_count from user_tables where table_name='TMP';
if v_count>0 then
v_sql:='drop table tmp';
EXECUTE IMMEDIATE v_sql;
end if;
select 
'create table tmp(csrq varchar2(10),
qyph varchar2(20),
pczl number(10,4)'||','||wm_concat(jyxmmc||' varchar2(20)')
||','||'xydj number(10,4),je number(10,4))' into v_sql
from test;
EXECUTE IMMEDIATE v_sql;
select ''''||to_char(csrq)||''','||to_char(qyph)||','||to_char(pczl)||','||wm_concat(jyz)||','||to_char(xydj)||','||to_char(je)  
into v_str
from test 
group by to_char(csrq),to_char(qyph),to_char(pczl),to_char(xydj),to_char(je);
v_sql:='insert into tmp values ('||v_str||') ';
EXECUTE IMMEDIATE v_sql;
commit;
end;

tj_angela
2014-06-09 · TA获得超过7530个赞
知道大有可为答主
回答量:6797
采纳率:75%
帮助的人:2563万
展开全部
select CSRQ,QYPH,PCZL,
sum(case when JYXMMC='硅' then JYZ else 0) as 硅,
sum(case when JYXMMC='碳' then JYZ else 0) as 碳
......
from table_name
group by CSRQ,QYPH,PCZL
;
行转列就是这样,枚举值有多少写多少
追问
枚举值是活的,不是固定的,怎么实现啊?
追答
这个一条sql肯定是写不出来的,要用到plsql块来实现,可能有错误,你编译调试调试,哪有问题就自己修改下,只能帮你到这个份上了

declare
cursor get_JYXMMC is
select distinct JYXMMC
from table_name ;
v_jyx varchar2(20);
v_sql varchar2(1000);
begin
open get_JYXMMC;
v_sql:='select CSRQ,QYPH,PCZL';
loop
fetch get_JYXMMC into v_jyx;
exit when get_JYXMMC%notfound;
v_sql:= v_sql || ',sum(case when JYXMMC=''' || v_jyx ||''' then JYZ else 0 end) as '|| v_jyx;
end loop;
close get_JYXMMC;
v_sql:= v_sql || ' from table_name group by CSRQ,QYPH,PCZL';
excute immediate v_sql
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ca5e220
2014-06-09 · TA获得超过297个赞
知道小有建树答主
回答量:713
采纳率:50%
帮助的人:308万
展开全部
用group by 分组吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式