求助sql语句

[复制链接]
查看11 | 回复9 | 2016-1-6 14:01:09 | 显示全部楼层 |阅读模式
本帖最后由 xb6323269 于 2012-3-8 10:55 编辑
CREATE TABLE t(org_no VARCHAR2(9),ymd VARCHAR2(8),amt NUMBER(10));
INSERT INTO t VALUES('12345890','20120301','1');
INSERT INTO t VALUES('12345600','20120302','2');
INSERT INTO t VALUES('12345079','20120303','3');
INSERT INTO t VALUES('12346070','20120301','4');
INSERT INTO t VALUES('12346072','20120302','8');
INSERT INTO t VALUES('12346079','20120303','2');
INSERT INTO t VALUES('12346907','20120304','5');
INSERT INTO t VALUES('12347907','20120301','6');

SQL> select * from t;
ORG_NOYMD
AMT
--------- -------- -----------
1234589020120301 1
1234560020120302 2
1234507920120303 3
1234607020120301 4
1234607220120302 8
1234607920120303 2
1234690720120304 5
1234790720120301 6
8 rows selected
要求得到的结果:1234520120301 1
1234520120302 3
1234520120303 6
1234620120301 4
1234620120302 12
1234620120303 14
1234620120304 19
1234720120301 6
org_no是9位,要求是按substr(org_no,1,5)进行分组,再按ymd进行分组,求sum(amt).
按ymd排序,要求sum(amt)是从第一天到当前日期的amt总和。



回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
LZ给的数据和要求不符吧?AMT是VARCHAR2还要SUM?
可以考虑SUM(AMT)OVER(PARTITION BY SUBSTR(ORG_NO,1,5),YMD)
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
本帖最后由 xb6323269 于 2012-3-8 10:04 编辑
visual2006 发表于 2012-3-8 09:52
LZ给的数据和要求不符吧?AMT是VARCHAR2还要SUM?
可以考虑SUM(AMT)OVER(PARTITION BY SUBSTR(ORG_NO,1,5), ...

额,写错是number型

。不过你这个还是没达到我想要的目的,你这个求出来的sum值只是某个org_no某一天的合值,并不是我说的从第一天到当前日期的sum值
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
那你的日期字段呢?
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
solomon_007 发表于 2012-3-8 10:23
那你的日期字段呢?

日期字段他就是这样的 比如20120308,varchar2型没什么问题
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
不知道这是不是你要的。。。
select substr(ora_no,1,5),substr(ymd,1,6), sum(amt) from t group by substr(ora_no,1,5),substr(ymd,1,6) order by 1,2
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
本帖最后由 hudingchen 于 2012-3-8 10:49 编辑
xb6323269 发表于 2012-3-8 10:30
日期字段他就是这样的 比如20120308,varchar2型没什么问题

你都给出建表语句了,为啥不给出合理的数据和结果呢。。。
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
hudingchen 发表于 2012-3-8 10:48
你都给出建表语句了,为啥不给出合理的数据和结果呢。。。

可能我之前说的不太清楚,现在编辑了下问题
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
SELECT t.*,
SUM(t.amt) OVER(PARTITION BY SUBSTR(org_no, 1, 5) ORDER BY t.ymd)
FROM t
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
hudingchen 发表于 2012-3-8 11:05
SELECT t.*,
SUM(t.amt) OVER(PARTITION BY SUBSTR(org_no, 1, 5) ORDER BY t.ymd)
FROM t

3Q ~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行