求教oracle sql用select as按月份搜索并列出总量。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教oracle sql用select as按月份搜索并列出总量。相关的知识,希望对你有一定的参考价值。

表A有column 时间和数量,需要select 时间 as 横坐标,sum(quantity) as纵坐标,但不存在月份需要在输出结果显示该月为0 例如表里三条数据: day quantity 2012-1 1000 2012-1 1000 2012-2 2000 2012-5 3000 要输出这样的结果: 横坐标 纵坐标 1月 2000 2月 2000 3月 0 4月 0 5月 3000 ... 12月 0

参考技术A 首先同意一楼的建议,创建临时表b(day
date),
数据为:(只要月份1-12即可)
day
2012-1-1
2012-2-1
2012-3-1
2012-4-1
2012-5-16
2012-6-1
2012-7-1
2012-8-1
2012-9-1
2012-10-1
2012-11-1
2012-12-1
然后查询:
select
to_char(day,'mm')||'月'
月份,sum(quantity)
总计
from
(select
day,quantity
from
A
union
select
day,0
quantity
from
b)
group
by
to_char(day,'mm');
输出样式如下:
月份
总计
------
------------------
01月
1000
02月
0
03月
1200
04月
0
05月
3000
06月
1500
07月
0
08月
0
09月
0
10月
0
11月
0
12月
0

oracle sql 查询:按照月份对数据进行合并处理,具体看下图,sql 能否实现?

WITH TEST_TBL AS
 (SELECT 'A' ITEM_CODE, TO_DATE('2014/1/1', 'yyyy/mm/dd') D_DATE,10 QUANTITY 
    FROM DUAL
  UNION ALL
  SELECT 'A' ITEM_CODE, TO_DATE('2014/2/1', 'yyyy/mm/dd') D_DATE,20 QUANTITY 
    FROM DUAL
  UNION ALL
  SELECT 'A' ITEM_CODE, TO_DATE('2014/3/1', 'yyyy/mm/dd') D_DATE,30 QUANTITY 
    FROM DUAL
  UNION ALL
  SELECT 'A' ITEM_CODE, TO_DATE('2014/4/1', 'yyyy/mm/dd') D_DATE,40 QUANTITY 
    FROM DUAL
  UNION ALL
  SELECT 'A' ITEM_CODE, TO_DATE('2014/1/1', 'yyyy/mm/dd') D_DATE,10 QUANTITY 
    FROM DUAL
  UNION ALL
  SELECT 'B' ITEM_CODE, TO_DATE('2014/2/1', 'yyyy/mm/dd') D_DATE,10 QUANTITY 
    FROM DUAL
  UNION ALL
  SELECT 'B' ITEM_CODE, TO_DATE('2014/3/1', 'yyyy/mm/dd') D_DATE,10 QUANTITY 
    FROM DUAL
  UNION ALL
  SELECT 'B' ITEM_CODE, TO_DATE('2014/4/1', 'yyyy/mm/dd') D_DATE,10 QUANTITY 
    FROM DUAL
  )
 SELECT ITEM_CODE,
 SUM( DECODE (TO_CHAR(D_DATE,'YYYY/MM') ,'2014/01', QUANTITY,0)) AS T1  ,
 SUM( DECODE (TO_CHAR(D_DATE,'YYYY/MM') ,'2014/02', QUANTITY,0)) AS T2  ,
 SUM( DECODE (TO_CHAR(D_DATE,'YYYY/MM') ,'2014/03', QUANTITY,0)) AS T3  ,
 SUM( DECODE (TO_CHAR(D_DATE,'YYYY/MM') ,'2014/04', QUANTITY,0)) AS T4  
 FROM TEST_TBL
 GROUP BY ITEM_CODE
 ORDER BY ITEM_CODE

参考技术A select 物料编码,sum(case to_char(日期,'mm') = '1' then 数量 else 0 end) 一月份数量,
    sum(case to_char(日期,'mm') = '2' then 数量 else 0 end) 二月份数量,
sum(case to_char(日期,'mm') = '3' then 数量 else 0 end) 三月份数量,
sum(case to_char(日期,'mm') = '4' then 数量 else 0 end) 四月份数量,
....
from tabname
group by 物料编码

本回答被提问者采纳

以上是关于求教oracle sql用select as按月份搜索并列出总量。的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql 查询:按照月份对数据进行合并处理,具体看下图,sql 能否实现?

mysql 按月份统计,sql 语句怎么写!

ORACLE将连续或不连续月份合并sql怎么写,要求不通过存储过程实现

Oracle中,为啥同样的SELECT查询语句,加了CREATE TABLE AS后速度更快了?

oracle todate函数

如何在 Oracle PL SQL 中将 INTO 与 SELECT AS 一起使用?