请教一SQL语句

ruoye_2008 2013-06-04 09:21:22
请教一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


这种形式,一个语句可以查出来吗?
...全文
284 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruoye_2008 2013-06-07
  • 打赏
  • 举报
回复
谢谢各位的回答,特别是3楼! 先结贴,再一个个的研究下。
qinliujiang 2013-06-06
  • 打赏
  • 举报
回复
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
basunio 2013-06-05
  • 打赏
  • 举报
回复
decode最好,效率也高。
  • 打赏
  • 举报
回复

select 日期,
       sum(decode(类型,1,数量,0))  "类型1" ,
       sum(decode(类型,2,数量,0))  "类型2" ,
       sum(decode(类型,3,数量,0))  "类型3" 
from tb1
group by 日期
order by 日期
u010412956 2013-06-04
  • 打赏
  • 举报
回复
这个肯定用11g的新特性pivot了。
 create table t1("日期" date,"类型" number,"数量" number);
 select * from t1 pivot(sum(数量) for 类型 in(1 类型1, 2 类型2, 3 类型3));
白脑哥 2013-06-04
  • 打赏
  • 举报
回复
额这个很简单,就是行转列,看我的代码
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         10

6 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
就样就可以了,行转列运用的还是比较广的
bonlog 2013-06-04
  • 打赏
  • 举报
回复
像这类问题,就算能查出来。sun公司也不建议使用,因为,这不是好的编程习惯。 建议你结合java来实现,就是把汇总的工作交给服务器语言来做,用多条语句。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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