有 字段A 和B
比如數據如下
A B
1 2
1 3
1 4
2 2
2 3
統計出的sql結果:
A count
1 3
2 2
select a,count(b) from t group by a;
--或count(b) over (partition by a)
如統計一級會計科目數量的sql:
select fo,count(dispname)from( select substr(subjcode,1,4) fo,bd_accsubj.dispname, bd_accsubj.pk_accsubj, bd_accsubj.pk_glorgbook from bd_accsubj where pk_glorgbook in(select pk_glorgbook from bd_glorgbook where glorgbookcode= '010502-0001' ) order by dispname) group by fo order by fo
方法二 partition 這個時候后面不需要group by 但是需要distinct fo 否則見下圖
select id,count(*) over(partition by pro_id) from sal;
以pro_id分組,統計分組后每個pro_id的記錄總數及對應的id;
類似還有count(*) over(order by ……)、sum(amount) over(partition by ……)等,略有區別,挺有意思,有興趣可以小研究下
select distinct fo,count(dispname) over( partition by fo) num1 from ( select substr(subjcode,1,4) fo,bd_accsubj.dispname, bd_accsubj.pk_accsubj, bd_accsubj.pk_glorgbook from bd_accsubj where pk_glorgbook in(select pk_glorgbook from bd_glorgbook where glorgbookcode= '010502-0001' ) order by dispname) order by fo
如果group by fo ,這里不能group by,總結:partition是group by的一種形式,group 不需要重復
不加distinct fo
更新2012-11-9 19:12:增加一列顯示一級科目名稱 需要外面嵌套兩個select
select fo, (select subjname from bd_accsubj where subjcode = fo and pk_glorgbook = '0001E1100000000000MX') aa,num1 from (select fo, count(dispname)num1 from (select substr(subjcode, 1, 4) fo, bd_accsubj.dispname, bd_accsubj.pk_accsubj, bd_accsubj.pk_glorgbook from bd_accsubj where pk_glorgbook in (select pk_glorgbook from bd_glorgbook where glorgbookcode = '010101-0001') order by dispname) group by fo) order by fo
統計結算中心制單由哪些部分組成
select pk_system, count (PK_SYSTEM) from gl_voucher where pk_corp= '1162' and dr= '0' GROUP BY pk_system |
2012-12-21 10:39:58 折騰到現在終于發現這個29462就是我結算憑證的數量
上面的gl是期初產生的,GL是手工錄入,EC是單據管理付款來的(當地行支付,應收應付報賬中心)
CV是協同憑證,FTS是結算中心的資金結算
結算中心從開始到現在制單有29474=29462(FTS)+6(EC)+(8-2)(GL,其中有下面兩個不知道為什么廢了)
文章列表