遇到group by统计问题
简化表数据为:
日期 科目 借 贷 余额 row_id( 主键)
2009-6-1 100201 1 2 3 1
2009-6-1 100201 2 3 4 2
2009-6-1 100202 3 4 5 3
2009-6-1 100202 8 8 9 4
2009-6-1 100203 4 4 6 5
2009-6-2 100201 1 2 3 6
2009-6-2 100201 2 3 12 7
2009-6-2 100202 3 4 1 8
2009-6-3 100203 5 2 8 9
2009-6-4 100201 1 3 4 10
...................................................................(数据多条)
说明:科目分1级如(1002)和2级,2级科目为100201,100202,100203
希望查询:用户页面输入一级科目如:1002统计出其下2级科目每日合计
格式如下:日期 借 贷 余额
2009-6-1查询结果:
日期 借 贷 余额
2009-6-1 1+2+3+8+4 2+3+4+8+4 比较100201取最大row_id对应余额是4 ,比较100202取最大row_id对应余额是9 ,比较100203取最大row_id对应余额是6 余额为:4+9+6 不是3+4+5+9+6
2009-6-2 1+2+3 2+3+4 比较100201取最大row_id对应余额是4 ,比较100201取最大row_id对应余额是12 ,比较100203取最大row_id对应余额是1,前期同2级100203科目最大row_id对应余额6 余额为:12+1+6 不是12+1
2009-6-3 5 2 前期同2级100201科目最大row_id对应余额12,前期同2级100202科目最大row_id对应余额1 余额为:12+1+8 不是8也不是12+1+6
.....................................................................................
规则:用户在前台输入一级科目如1002和不定范围的时间段如2009-5-22到2009-6-4,请给出每日统计,案例和格式如上
1级下2级科目数目不定,但是前4位编码一定是1级科目编码如:1002,2级科目之间编码唯一,查询可用like '1002%'
2借,贷统计
余额统计:是统计group by查询开始日期到每天的时间段,而不是每天 如:2009-6-3余额为:12+1+8 不是8也不是12+1+6
如果这段时间没有科目100204发生业务,暂且不管.
个人遇到困难,请高手最好能给出SQL,关键是余额合计,谢先.
[解决办法]
关注下
[解决办法]
关注
[解决办法]
create table zzr_test(
row1 varchar2(20),
row2 varchar2(20),
row3 number,
row4 number,
row5 number,
row6 number)
select a.row1,a.row2,sum(a.row3),sum(a.row4),max(b.row5)--b.row1,b.row2,sum(b.row5)
from zzr_test a, zzr_test b
where a.row1='2009-6-1' and a.row2 like '1002%'
and (b.row2,b.row6) in(
select row2,max(row6) from zzr_test where row1='2009-6-1' and row2 like '1002%'
group by row2)
and a.row2=b.row2 and a.row1=b.row1
group by a.row1,a.row2
[解决办法]
先看看
[解决办法]
这个有点意思,可以研究一下
[解决办法]
顶一下
[解决办法]
ding
[解决办法]
顶了
[解决办法]
高手都去觅它贴了, 因为这个贴完全读懂都很占时间呀, 看来带星高手为赚分也很现实哟
^_^, 有些过激, 只是想替LZ把高手激出来
[解决办法]
回帖是一种美德!每天回帖即可获得 10 分可用分!
[解决办法]
先收藏一下
[解决办法]
额 顶一下
------解决方案--------------------
回帖是一种美德!回帖是一种美德!
[解决办法]
回帖是一种美德!每天回帖即可获得 10 分可用分
[解决办法]
so easy!
[解决办法]
mark
[解决办法]
这是DB2版啊,没用过DB2,不懂
不过你可以试下发到SQlServer版,那里高手多
[解决办法]
期待。。。。。。
[解决办法]
学习一下
[解决办法]
看不懂题目诶
[解决办法]
up
[解决办法]
select 日期,科目,sum(借),sum(贷),max(余额)
from 科目数据表
where 科目 like 一级科目变量值 || '%'
group by 日期,科目
[解决办法]
真的要顶一下
[解决办法]
ding le
[解决办法]
表名:tablet
select 日期,sum(借) as 借,sum(贷) as 贷,sum(余额) as 余额 from(select 日期,科目,sum(借) as 借,sum(贷) as 贷, (select(余额) from tablet t2 where row_id=max(row_id) and 日期=t1.日期 and 科目=t1.科目 group by 科目) as 余额 from tablet t1 where left(科目,4)=@科目)) as tt order by 日期
[解决办法]
再试下这个
select 日期,科目,sum(借) as 借,sum(贷) as 贷,sum(case when row_id= (select max(row_id) from tablet where 日期=t1.日期 and 科目=t1.科目 group by 科目) then 余额 else 0 end) as 余额 from tablet t1 where left(科目,4)=@科目) order by 日期
[解决办法]
顶了再看~~
[解决办法]
看一看
[解决办法]
分析函数呀
[解决办法]
这是DB2版啊,没用过DB2,不懂
不过你可以试下发到SQlServer版,那里高手多
[解决办法]
刚看很简单,再看很复杂啊。
[解决办法]
先把一级科目下的所有数据都搜索出来,再用Group by 二级科目
[解决办法]
以下代码不考虑性能(oracle)
select CC.date1,CC.date2,DD.date3 from
(select sum(date1) date1,sum(date2) date2,'' date3
from test
where ymd = /*ymd*/
and substr(sub,0,4) = /*sub*/) CC,
(select '' date1,'' date2,sum(date3) date3
from
(
select date1, sub,date2, date3, ROW_NUMBER()
OVER (PARTITION BY SUB ORDER BY id desc) AS emp_id
FROM test
where ymd <= /*ymd*/
and substr(sub,0,4) = /*sub*/
) A
where
A.emp_id = 1) DD
table
YMDSUBDATE1DATE2DATE3ID
2009/6/1100201 1231
2009/6/1100201 2342
2009/6/1100202 3453
2009/6/1100202 8894
2009/6/1100203 4465
2009/6/2100201 1236
2009/6/2100201 23127
2009/6/2100202 3418
2009/6/3100203 5289
2009/6/4100201 13410
------解决方案--------------------
期待,
[解决办法]
不错不错 ~ SQL语句我有兴趣 ~ 先顶下 ~ 研究研究
[解决办法]
goto 语句怎么用
[解决办法]
学过数据库,先看看
[解决办法]
yan jiu xia
[解决办法]
还没完啊,>?