【紧急!!!】关于润乾报表处理

jarvis_java 2009-12-08 02:23:17
1.我从数据库查出以下数据
客户 月份 销售额
A 1 100
A 3 300
A 6 500
A 12 790
B 4 234
B 6 456



报表样式:
客户 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
A 100 0 300 0 0 500 0 0 0 0 0 790
B 0 0 0 234 0 456 0 0 0 0 0 0

1.按照客户分组后,每个月的销售额怎么匹配到对应月份中去?
2.因为查出的数据中可能只有部分月份,没有的月份在报表中销售额显示为0
请问怎么处理?
客服分组后,就不能再用月份分组横向扩展。会有部分月份不能出来
在线等待答案!
先帮忙者优先给分
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jarvis_java 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jerry8586 的回复:]
附上代码
SQL codeSELECT
T.客户 客户,CASEWHEN T.月份='1'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 1月,CASEWHEN T.月份='2'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 2月,CASEWHEN T.月份='3'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 3月,CASEWHEN T.月份='4'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 4月,CASEWHEN T.月份='5'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 5月,CASEWHEN T.月份='6'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 6月,CASEWHEN T.月份='7'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 7月,CASEWHEN T.月份='8'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 8月,CASEWHEN T.月份='9'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 9月,CASEWHEN T.月份='10'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 10月,CASEWHEN T.月份='11'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 11月,CASEWHEN T.月份='12'THEN NVL(TO_CHAR(SUM(T.销售额)),'0')END 12月,FROMTABLE TGROUPBY
T.客户,
T.月份
[/Quote]

你一定是ORACLE高手
呵呵 不过DB2中没有NVL函数
很感谢你 已经知道怎么做了
jerry8586 2009-12-08
  • 打赏
  • 举报
回复
附上代码

SELECT
T.客户 客户,
CASE
WHEN T.月份 = '1' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 1月,
CASE
WHEN T.月份 = '2' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 2月,
CASE
WHEN T.月份 = '3' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 3月,
CASE
WHEN T.月份 = '4' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 4月,
CASE
WHEN T.月份 = '5' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 5月,
CASE
WHEN T.月份 = '6' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 6月,
CASE
WHEN T.月份 = '7' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 7月,
CASE
WHEN T.月份 = '8' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 8月,
CASE
WHEN T.月份 = '9' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 9月,
CASE
WHEN T.月份 = '10' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 10月,
CASE
WHEN T.月份 = '11' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 11月,
CASE
WHEN T.月份 = '12' THEN NVL(TO_CHAR(SUM(T.销售额)), '0') END 12月,
FROM
TABLE T
GROUP BY
T.客户,
T.月份
jerry8586 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jarvis_java 的回复:]
引用 3 楼 jerry8586 的回复:
SQL codeSELECT
    T.客户 客户,
    DECODE(T.月份,'1', TO_CHAR(SUM(T.销售额)),'0') 1月,
    DECODE(T.月份,'2', TO_CHAR(SUM(T.销售额)),'0') 2月,
    DECODE(T.月份,'3', TO_CHAR(SUM(T.销售额)),'0') 3月,
    DECODE(T.月份,'4', T?-


DB2 8.0 中有DECODE 函数?
[/Quote]
这个是Oracle的,DB2用CASE WHEN吧。
jarvis_java 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jerry8586 的回复:]
SQL codeSELECT
T.客户 客户,
DECODE(T.月份,'1', TO_CHAR(SUM(T.销售额)),'0') 1月,
DECODE(T.月份,'2', TO_CHAR(SUM(T.销售额)),'0') 2月,
DECODE(T.月份,'3', TO_CHAR(SUM(T.销售额)),'0') 3月,
DECODE(T.月份,'4', T?-
[/Quote]

DB2 8.0 中有DECODE 函数?
jerry8586 2009-12-08
  • 打赏
  • 举报
回复

SELECT
T.客户 客户,
DECODE(T.月份, '1', TO_CHAR(SUM(T.销售额)), '0') 1月,
DECODE(T.月份, '2', TO_CHAR(SUM(T.销售额)), '0') 2月,
DECODE(T.月份, '3', TO_CHAR(SUM(T.销售额)), '0') 3月,
DECODE(T.月份, '4', TO_CHAR(SUM(T.销售额)), '0') 4月,
DECODE(T.月份, '5', TO_CHAR(SUM(T.销售额)), '0') 5月,
DECODE(T.月份, '6', TO_CHAR(SUM(T.销售额)), '0') 6月,
DECODE(T.月份, '7', TO_CHAR(SUM(T.销售额)), '0') 7月,
DECODE(T.月份, '8', TO_CHAR(SUM(T.销售额)), '0') 8月,
DECODE(T.月份, '9', TO_CHAR(SUM(T.销售额)), '0') 9月,
DECODE(T.月份, '10', TO_CHAR(SUM(T.销售额)), '0') 10月,
DECODE(T.月份, '11', TO_CHAR(SUM(T.销售额)), '0') 11月,
DECODE(T.月份, '12', TO_CHAR(SUM(T.销售额)), '0') 12月,
FROM
TABLE T
GROUP BY
T.客户,
T.月份
jarvis_java 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
1 group by name,month
一定要分组

2 有个默认值,或者case when 语句,或者 ifnull / nullif SQL函数
[/Quote]

数据库查出的数据已经分好组
只是报表上不晓得怎么处理
老紫竹 2009-12-08
  • 打赏
  • 举报
回复
1 group by name,month
一定要分组

2 有个默认值,或者case when 语句,或者 ifnull / nullif SQL函数

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧