ITPub博客

首页 > Linux操作系统 > Linux操作系统 > sql

sql

原创 Linux操作系统 作者:e_soft 时间:2009-04-18 17:43:13 0 删除 编辑

已有数据:
==========
会计期 物料分类 期初 本期入 本期出 期末
200901  C1        10    1        2        9
200901  C2        10    1        3        8

200902  C1        9     0         2        7
200902  C2        8     1         2        7


查询 200801-200912 的数据,查询结果:
==========
开始会计期 结束会计期 物料分类 期初 本期入 本期出 期末
200901       200902     C1      10    1          4       7
200901       200902     C2      10    2          5       7

注意:
期初,取查询范围内存在的最小会计期的期初
期末,取查询范围内存在的最大会计期的期末
本期入和出,求和

具体如下:

SQL> select  kjq 会计期,
  2          wlfl 物料分类,
  3          qc   期初,
  4          bql  本期入,
  5          bqc  本期出,
  6          qm   期末
  7  from tmp;

会计期 物料分类       期初     本期入     本期出       期末
------ -------- ---------- ---------- ---------- ----------
200901 C1               10          1          2          9
200901 C2               10          1          3          8
200902 C1                9          0          2          7
200902 C2                8          1          2          7

SQL>
SQL> select min(kjq) 开始会计期,
  2         max(kjq) 结束会计期,
  3         wlfl 物料分类,
  4         min(qc) keep(dense_rank first order by kjq) 期初,
  5         sum(bql) 本期入,
  6         sum(bqc) 本期出,
  7         max(qm) keep(dense_rank last order by kjq) 期末
  8  from tmp
  9  group by wlfl;

开始会计期 结束会计期 物料分类       期初     本期入     本期出       期末
---------- ---------- -------- ---------- ---------- ---------- ----------
200901     200902     C1               10          1          4          7
200901     200902     C2               10          2          5          7

SQL>

 

WITH TEMP AS
(SELECT T.*,ROW_NUMBER() OVER(PARTITION BY WLFL ORDER BY KJQ) RN1,ROW_NUMBER() OVER(PARTITION BY WLFL ORDER BY KJQ DESC) RN2 FROM
(
  SELECT '200901' KJQ,'C1' WLFL,10 QC,1 BQR,2 BQC,9 QM FROM DUAL
  UNION
  SELECT '200901' KJQ,'C2' WLFL,10 QC,1 BQR,3 BQC,8 QM FROM DUAL
  UNION
  SELECT '200902' KJQ,'C1' WLFL,9  QC,0 BQR,2 BQC,7 QM FROM DUAL
  UNION
  SELECT '200902' KJQ,'C2' WLFL,8  QC,1 BQR,2 BQC,7 QM FROM DUAL
) T
)
SELECT MIN(KJQ) 开始会计期,
       MAX(KJQ) 结束会计期,
       WLFL 物料分类,
       (SELECT QC FROM TEMP WHERE WLFL = T.WLFL AND RN1 = 1) 期出,
       SUM(BQR) 本期入,
       SUM(BQC) 本期出,
       (SELECT QM FROM TEMP WHERE WLFL = T.WLFL AND RN2 = 1) 期末
FROM TEMP T GROUP BY WLFL ORDER BY WLFL


开始会计期 结束会计期 物料分类 期初 本期入 本期出 期末
200901       200902     C1      10    1          4       7
200901       200902     C2      10    2          5       7

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21220558/viewspace-590894/,如需转载,请注明出处,否则将追究法律责任。

上一篇: SQL
下一篇: 英文面试
请登录后发表评论 登录
全部评论

注册时间:2009-03-26

  • 博文量
    28
  • 访问量
    24004