【求助】关于一个SQL分组合并取值的语句,如果写?请大牛给出思路

帅员外 2014-09-18 11:00:57
原表 结果大概如下

学校 科目 日期 0借方/1贷方 金额
北京一中 笔记本 2014/9/18 0 600
北京一中 笔记本 2014/9/18 0 300
北京一中 笔记本 2014/9/18 1 200
北京一中 笔记本 2014/9/18 1 300
北京一中 笔记本 2014/9/18 1 400
北京一中 打印机 2014/9/18 0 500
北京一中 打印机 2014/9/18 1 500

北京二中 打印机 2014/9/18 0 200
北京二中 打印机 2014/9/18 0 300
北京二中 打印机 2014/9/18 1 100
北京二中 打印机 2014/9/18 1 300


我想根据 借贷方向、学校、科目、日期 来进行合并 金额

学校 科目 日期 借方总金额 贷方总金额
北京一中 笔记本 2014/9/18 900 900
北京一中 打印机 2014/9/18 500 900
北京二中 打印机 2014/9/18 500 400




CREATE TABLE csz1
(
xx VARCHAR2(50),
km VARCHAR2(50),
rq VARCHAR2(50),
jdfx VARCHAR2(50),
je NUMBER(20,8)
)
insert into csz1 values ('北京一中', '笔记本', '2014/9/18', '0', 600);
insert into csz1 values ('北京一中', '笔记本', '2014/9/18', '0', 300);
insert into csz1 values ('北京一中', '笔记本', '2014/9/18', '1', 300);
insert into csz1 values ('北京一中', '笔记本', '2014/9/18', '1', 300);
insert into csz1 values ('北京一中', '笔记本', '2014/9/18', '1', 400);
insert into csz1 values ('北京一中', '打印机', '2014/9/18', '0', 500);
insert into csz1 values ('北京一中', '打印机', '2014/9/18', '1', 500);
insert into csz1 values ('北京二中', '打印机', '2014/9/18', '0', 200);
insert into csz1 values ('北京二中', '打印机', '2014/9/18', '0', 300);
insert into csz1 values ('北京二中', '打印机', '2014/9/18', '1', 100);
insert into csz1 values ('北京二中', '打印机', '2014/9/18', '1', 300);




希望熟悉SQL的人 能够帮助我。
...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bw555 2014-09-18
  • 打赏
  • 举报
回复
再提供一种写法
select xx,km,rq,sum(借方),sum(贷方)
from(
select xx,km,rq, je 借方,0 贷方 from csz1 where jdfx='0'
union all
select xx,km,rq, 0 借方,je 贷方 from csz1 where jdfx='1')
group by xx,km,rq
sych888 2014-09-18
  • 打赏
  • 举报
回复
DECODE为oracle的特有函数 CASE WHEN为SQL标准 select t.xx, t.km, t.rq, sum(case when t.jdfx='0' then t.je else 0 end) "借方", sum(case when t.jdfx='1' then t.je else 0 end) "贷方" from csz1 t group by t.xx, t.km, t.rq order by t.xx;
sych888 2014-09-18
  • 打赏
  • 举报
回复
select t.xx, t.km, t.rq, sum(decode(t.jdfx,0,t.je)) "借方", sum(decode(t.jdfx,1,t.je)) "贷方" from csz1 t group by t.xx, t.km, t.rq
bw555 2014-09-18
  • 打赏
  • 举报
回复
select xx,km,rq, 
sum(decode(jdfx,'0',je))  借方,
sum(decode(jdfx,'1',je))  贷方
group by xx,km,rq
帅员外 2014-09-18
  • 打赏
  • 举报
回复
应该就是 分组后,在来一个 行转列。
帅员外 2014-09-18
  • 打赏
  • 举报
回复
单纯的分组 我懂 但是牵扯到 用1个字段 借贷方向 来 增加2个分别代表借方金额总和、和贷方金额总和 。 我就不清楚了。。
帅员外 2014-09-18
  • 打赏
  • 举报
回复
引用 4 楼 sych888 的回复:
select t.xx, t.km, t.rq, sum(decode(t.jdfx,0,t.je)) "借方", sum(decode(t.jdfx,1,t.je)) "贷方" from csz1 t group by t.xx, t.km, t.rq
万分感谢。
帅员外 2014-09-18
  • 打赏
  • 举报
回复
引用 3 楼 bw555 的回复:
select xx,km,rq, 
sum(decode(jdfx,'0',je))  借方,
sum(decode(jdfx,'1',je))  贷方
group by xx,km,rq
万分感谢。

17,086

社区成员

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

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