请教一SQL语句:表结构:
日期 类型 数量
2013-06-04 1 20
2013-06-04 2 10
2013-06-03 1 60
2013-06-03 1 20
2013-06-03 2 10
2013-06-03 3 10类型只有:1、2、3,现在想查出每天3种类型的总数量,即为:
日期 类型1 类型2 类型3
2013-06-04 20 10 0
2013-06-03 80 10 10这种形式,一个语句可以查出来吗?SQL
日期 类型 数量
2013-06-04 1 20
2013-06-04 2 10
2013-06-03 1 60
2013-06-03 1 20
2013-06-03 2 10
2013-06-03 3 10类型只有:1、2、3,现在想查出每天3种类型的总数量,即为:
日期 类型1 类型2 类型3
2013-06-04 20 10 0
2013-06-03 80 10 10这种形式,一个语句可以查出来吗?SQL
SCOTT@xp-ora10g> create table t1("日期" date,"类型" number,"数量" number);Table created.
SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-04'),1,20);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-04'),2,10);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),1,60);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),1,20);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),2,10);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),3,10);1 row created.SCOTT@xp-ora10g> select * from t1;日期 类型 数量
---------- ---------- ----------
2013-06-04 1 20
2013-06-04 2 10
2013-06-03 1 60
2013-06-03 1 20
2013-06-03 2 10
2013-06-03 3 106 rows selected.
SCOTT@xp-ora10g> select 日期,sum(case when 类型=1 then 数量 else 0 end) "类型1",sum(case when 类型=2 then 数量 else 0end
) "类型2",sum(case when 类型=3 then 数量 else 0 end) "类型3" from t1 group by 日期;日期 类型1 类型2 类型3
---------- ---------- ---------- ----------
2013-06-04 20 10 0
2013-06-03 80 10 10就样就可以了,行转列运用的还是比较广的
select * from t1 pivot(sum(数量) for 类型 in(1 类型1, 2 类型2, 3 类型3));
select 日期,
sum(decode(类型,1,数量,0)) "类型1" ,
sum(decode(类型,2,数量,0)) "类型2" ,
sum(decode(类型,3,数量,0)) "类型3"
from tb1
group by 日期
order by 日期
select a.com_data1,
sum( case when
a.com_name=1
then a.com_count
else 0
end
)"类型1",
sum(case when
a.com_name=2
then a.com_count
else 0
end
)"类型2",
sum(case when
a.com_name=3
then a.com_count
else 0
end
)"类型3"
from aaa a group by a.com_data1
order by a.com_data1 desc