列转行

基于Oracle:

表:

期望结果:

  或  

建表:

create table AA_WW1
(
  name    VARCHAR2(10),
  result    VARCHAR2(10),
  time    DATE not null

);
insert into AA_WW1 (name,result, time) values ('湖人','', to_date('09-11-2017', 'dd-mm-yyyy'));
insert into AA_WW1 (name,result, time) values ('火箭','', to_date('09-11-2017', 'dd-mm-yyyy'));
insert into AA_WW1 (name,result, time) values ('火箭','', to_date('09-11-2017', 'dd-mm-yyyy'));
insert into AA_WW1 (name,result, time) values ('火箭','', to_date('09-11-2017', 'dd-mm-yyyy'));
insert into AA_WW1 (name,result, time) values ('火箭','', to_date('10-11-2017', 'dd-mm-yyyy'));
insert into AA_WW1 (name,result, time) values ('湖人','', to_date('10-11-2017', 'dd-mm-yyyy'));
insert into AA_WW1 (name,result, time) values ('湖人','', to_date('10-11-2017', 'dd-mm-yyyy'));

方案一:

select a.time,
SUMCASE a.result WHEN '' THEN 1 ELSE 0 ENDas "胜",
SUMCASE a.result WHEN '' THEN 1 ELSE 0 ENDas "负"
from AA_WW1 a
group by a.time

或:

select a.name,
SUMCASE a.result WHEN '' THEN 1 ELSE 0 ENDas "胜",
SUMCASE a.result WHEN '' THEN 1 ELSE 0 ENDas "负"
from AA_WW1 a
group by a.name

方案二:

 select a1.time, a1."胜", a2."负" from
 (select a.time ,count(a.result) as "胜" from AA_WW1 a where a.result = '' group by a.time) a1
 inner join 
 (select a.time ,count(a.result) as "负" from AA_WW1 a where a.result = '' group by a.time) a2
 on a1.time = a2.time

 

还可以做多组统计:

结果:

sql:

select a.time, a.name,
SUMCASE a.result WHEN '' THEN 1 ELSE 0 ENDas "胜",
SUMCASE a.result WHEN '' THEN 1 ELSE 0 ENDas "负"
from AA_WW1 a
group by a.time,a.name
order by a.time

 

结果:

sql:

select  a.name,a.time,
SUMCASE a.result WHEN '' THEN 1 ELSE 0 ENDas "胜",
SUMCASE a.result WHEN '' THEN 1 ELSE 0 ENDas "负"
from AA_WW1 a
group by a.name,a.time
order by a.time

 

posted @ 2019-04-18 17:29  隔壁w王叔叔  阅读(153)  评论(0)    收藏  举报