SQL会计记帐分类合计

free7090 2009-02-23 07:07:14
TABLEA
科目编码 名称
aa 工时费
bb 运输费
cc 加工费
tableb
区分编码 科目编码
001 aa
002 bb
003 cc
table c
种类 区分编码 金额
0 001 100
0 002 200
0 003 300
0 001 200
0 002 300
1 001 100
1 002 200
1 003 300
1 001 200
1 002 300
2 001 100
2 002 200
2 003 300
2 001 200
2 002 300
想要 结果
种类 aa bb cc
0 300 500 300
1 300 500 300
2 300 500 300
合计 900 1500 900
...全文
138 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 free7090 的回复:]
谢谢了。
不过弄错了个条件。
tableb
收入支出 区分编码 科目编码
收入 001 aa
收入 002 bb
收入 003 cc
支出 001 aa
支出 002 bb
支出 003 cc
table c
种类 区分编码 金额 区分
0 001 100 收入
0 002 200 收入
0 003 300 支出
0 001 200 收入
0 002 300 收入
1 001 100 支出
1 002 200 收入
1 003 300 收入
1 001 200 收入
1 002 300 支出
2 001 100 支出
2 002 200 收入
2 003 300 收入
2 001 200 收入
2 002 300 支出
想要 结果
种类 收入支出 aa bb cc
0 收入 300 500 300
支出 200 100 100
利润 100 400 200
1 收入 300 500 300
支出 200 100 100
利润 100 400 200
2 收入 300 500 300
支出 200 100 100
利润 100 400 200
和计 收入 300 500 300
支出 200 100 100
利润 100 400 200 [/Quote]

请楼主告诉我,你的结果怎么算出来的?我研究了一个小时,楞是没看出你的结果是怎么来的?

而且种类0,1,2和合计的数据一模一样,只需要计算一个,然后生成个0,1,2和合计的表,交叉连接即可.貌似不需要什么合计或是rollup了.
xuqunying0545 2009-02-23
  • 打赏
  • 举报
回复
路过,顶,顺便学一下rollup()用法
free7090 2009-02-23
  • 打赏
  • 举报
回复
都下班了?
free7090 2009-02-23
  • 打赏
  • 举报
回复
谢谢你了。

我觉得是不是应该用到rollup函数呢。
见4楼的问题,谢谢了。
Andy__Huang 2009-02-23
  • 打赏
  • 举报
回复
那就修改一个参数:
select a.种类,a.收入支出
,sum(case when b.科目编码='aa' then 金额 else 0 end) aa
,sum(case when b.科目编码='bb' then 金额 else 0 end) bb
,sum(case when b.科目编码='cc' then 金额 else 0 end) cc
from tableC a
left join tableB b on a.区分编码=b.区分编码
left join tableA c on b.科目编码=c.科目编码
group by a.种类,a.收入支出 with cube
order by a.种类,a.收入支出
free7090 2009-02-23
  • 打赏
  • 举报
回复
我这个比这个还要复杂。不知道怎么弄。
而且还不让使用存储过程。
Andy__Huang 2009-02-23
  • 打赏
  • 举报
回复
这样写更好一些:
select case when a.种类 is null then '合计' else a.种类 end 种类
,sum(case when b.科目编码='aa' then 金额 else 0 end) aa
,sum(case when b.科目编码='bb' then 金额 else 0 end) bb
,sum(case when b.科目编码='cc' then 金额 else 0 end) cc
from tableC a
left join tableB b on a.区分编码=b.区分编码
left join tableA c on b.科目编码=c.科目编码
group by a.种类 with rollup
free7090 2009-02-23
  • 打赏
  • 举报
回复
谢谢了。
不过弄错了个条件。
tableb
收入支出 区分编码 科目编码
收入 001 aa
收入 002 bb
收入 003 cc
支出 001 aa
支出 002 bb
支出 003 cc
table c
种类 区分编码 金额 区分
0 001 100 收入
0 002 200 收入
0 003 300 支出
0 001 200 收入
0 002 300 收入
1 001 100 支出
1 002 200 收入
1 003 300 收入
1 001 200 收入
1 002 300 支出
2 001 100 支出
2 002 200 收入
2 003 300 收入
2 001 200 收入
2 002 300 支出
想要 结果
种类 收入支出 aa bb cc
0 收入 300 500 300
支出 200 100 100
利润 100 400 200
1 收入 300 500 300
支出 200 100 100
利润 100 400 200
2 收入 300 500 300
支出 200 100 100
利润 100 400 200
和计 收入 300 500 300
支出 200 100 100
利润 100 400 200
carygrant 2009-02-23
  • 打赏
  • 举报
回复
我今天上午还在想这个问题
不过我统计的金额要多一个工序,要用sum计算得出,种类要变成日期
头痛ing.....
Andy__Huang 2009-02-23
  • 打赏
  • 举报
回复
再加合计:

select isnull(种类,'合计') as 种类,aa,bb,cc
from
(select a.种类,sum(case when b.科目编码='aa' then 金额 else 0 end) aa
,sum(case when b.科目编码='bb' then 金额 else 0 end) bb
,sum(case when b.科目编码='cc' then 金额 else 0 end) cc
from tableC a
left join tableB b on a.区分编码=b.区分编码
left join tableA c on b.科目编码=c.科目编码
group by a.种类 with rollup
)aa
order by 1
Andy__Huang 2009-02-23
  • 打赏
  • 举报
回复
select a.种类,sum(case when b.科目编码='aa' then 金额 else 0 end) aa
,sum(case when b.科目编码='bb' then 金额 else 0 end) bb
,sum(case when b.科目编码='cc' then 金额 else 0 end) cc
from tableC a
left join tableB b on a.区分编码=b.区分编码
left join tableA c on b.科目编码=c.科目编码
group by a.种类

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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