如上图数据显示这是我想要得到的结果,请问sql语句该怎么写等于就是前4列要做成一条数据,把MOS值,这个是指标,需要得到它下面的得分,上周期得分,同比值。然后写在一行上面这是我写的sql语句,后面不知道该怎么写了,思索了一天了求大神解答
select 列1,列2,
case when 列3 not in ('同比','得分','上周期得分') then 列3 else null end label1,
max(case when 列3 = '得分' then result_field else null end) 得分,
max(case when 列3 = '同比' then result_field else null end) 同比,
max(case when 列3 = '上周期得分' then result_field else null end) 上周期得分
from cfg_qa_scene group by 列1,列2,列3,result_field这样写出来的结果是8条数据
SQLselectlabeloracle
case when 列3 not in ('同比','得分','上周期得分') then 列3 else null end 列3,
case when 列3 = '得分' then 列4 else null end 得分,
case when 列3 = '上周期得分' then 列4 else null end 上周期得分,
case when 列3 = '同比' then 列4 else null end 同比
from cfg_qa_scene
上个语句写错了。。重新发一下
sum(case when 列3 not in ('同比','得分','上周期得分') then 列3 else null end)列3,
sum(case when 列3 = '得分' then 列4 else null end) 得分,
sum(case when 列3 = '上周期得分' then 列4 else null end) 上周期得分,
sum(case when 列3 = '同比' then 列4 else null end )同比
from cfg_qa_scene
(select t.*,
case
when rownum <= 3 then
'MOS值'
else
'下载速率(KBps)'
end 列5
from cfg_qa_scene t
where t.列3 not in ('MOS值', '下载速率(KBps)'))
select 列1,
列2,
列5,
max(case
when 列3 = '得分' then
列4
else
null
end) 得分,
max(case
when 列3 = '上周期得分' then
列4
else
null
end) 上周期得分,
max(case
when 列3 = '同比' then
列4
else
null
end) 同比
from tt
group by 列1, 列2, 列5;
你这个写的是根据我的测试数据写死的吧。。能不能有个通用的,我的数据不是只有这么几条的,有很多,能不能写过通用的呢这个的数据就差不多了,得到的结果是下图
那问问题得说清楚噢。
给出create 和 insert 脚本吧。。多搞点数据
你这个写的是根据我的测试数据写死的吧。。能不能有个通用的,我的数据不是只有这么几条的,有很多,能不能写过通用的呢这个的数据就差不多了,得到的结果是下图
那问问题得说清楚噢。
给出create 和 insert 脚本吧。。多搞点数据prompt PL/SQL Developer import file
prompt Created on 2013年5月20日 by METARNET
set feedback off
set define off
prompt Creating A...
create table A
(
"level1" VARCHAR2(20),
level2 VARCHAR2(50),
level3 VARCHAR2(50),
fieldvalue VARCHAR2(50)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);prompt Disabling triggers for A...
alter table A disable all triggers;
prompt Loading A...
insert into A ("level1", level2, level3, fieldvalue)
values ('拨测', '拨测结果', 'MOS值', 'f001');
insert into A ("level1", level2, level3, fieldvalue)
values ('拨测', '拨测结果', '得分', 'f002');
insert into A ("level1", level2, level3, fieldvalue)
values ('拨测', '拨测结果', '上周期得分', 'f003');
insert into A ("level1", level2, level3, fieldvalue)
values ('拨测', '拨测结果', '同比', 'f004');
insert into A ("level1", level2, level3, fieldvalue)
values ('拨测', '拨测结果', '下载速率(KBps)', 'f005');
insert into A ("level1", level2, level3, fieldvalue)
values ('拨测', '拨测结果', '得分', 'f006');
insert into A ("level1", level2, level3, fieldvalue)
values ('拨测', '拨测结果', '上周期得分', 'f007');
insert into A ("level1", level2, level3, fieldvalue)
values ('拨测', '拨测结果', '同比', 'f008');
insert into A ("level1", level2, level3, fieldvalue)
values ('波动' || chr(10) || '', '波动结果', '上周期得分', 'f011');
insert into A ("level1", level2, level3, fieldvalue)
values ('波动', '波动结果', '同比', 'f012');
insert into A ("level1", level2, level3, fieldvalue)
values ('波动' || chr(10) || '', '波动结果', '波动值', 'f009');
insert into A ("level1", level2, level3, fieldvalue)
values ('波动' || chr(10) || '', '波动结果', '得分', 'f010');
insert into A ("level1", level2, level3, fieldvalue)
values ('波动', '波动结果', '波动速率(KBps)' || chr(10) || '', 'f013');
insert into A ("level1", level2, level3, fieldvalue)
values ('波动', '波动结果', '得分', 'f014');
insert into A ("level1", level2, level3, fieldvalue)
values ('波动', '波动结果', '上周期得分', 'f015');
insert into A ("level1", level2, level3, fieldvalue)
values ('波动', '波动结果', '同比', 'f016');
insert into A ("level1", level2, level3, fieldvalue)
values ('评测' || chr(10) || '', '评测结果', '评测值', 'f017');
insert into A ("level1", level2, level3, fieldvalue)
values ('评测' || chr(10) || '', '评测结果', '得分', 'f018');
insert into A ("level1", level2, level3, fieldvalue)
values ('评测' || chr(10) || '', '评测结果', '上周期得分', 'f019');
insert into A ("level1", level2, level3, fieldvalue)
values ('评测', '评测结果', '同比', 'f020');
commit;
prompt 20 records loaded
prompt Enabling triggers for A...
alter table A enable all triggers;
set feedback on
set define on
prompt Done.好的,这是一些测试数据,基本是都是按照4条一组的形式存储的,level3的值不是固定的,得想办法得到值存储才行,比方说MOS值,得分,上周期得分,同比,后面得分,上周期得分,同比这三个是死的,但MOS值这个必须得从数据库里得到才行,不是固定的
比如我按照你的insert插入后,我怎么知道这个"上周期得分"是属于'波动值'的还是'波动速率(KBps)'的???
select level1,LEVEL2,
case when level3 not in ('同比','得分','上周期得分') then level3 else null end label1,
case when level3 = '得分' then fieldvalue else null end 得分,
case when level3 = '同比' then fieldvalue else null end 同比,
case when level3 = '上周期得分' then fieldvalue else null end 上周期得分
from a
暂时只想了这个方法,就是靠后台循环处理了
select level2,level4,
max(case when level3 not in ('同比','得分','上周期得分') then level3 end),
max(case when level3 = '得分' then fieldvalue else null end),
max(case when level3 = '同比' then fieldvalue else null end),
max(case when level3 = '上周期得分' then fieldvalue else null end)
from a
group by level4,level2
以前就是这样写的。。level4是加的归属