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 01.按照客户分组后,每个月的销售额怎么匹配到对应月份中去?
2.因为查出的数据中可能只有部分月份,没有的月份在报表中销售额显示为0
请问怎么处理?
客服分组后,就不能再用月份分组横向扩展。会有部分月份不能出来
在线等待答案!
先帮忙者优先给分

解决方案 »

  1.   

    1 group by name,month
     一定要分组2 有个默认值,或者case when 语句,或者 ifnull / nullif SQL函数
      

  2.   


    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.月份
      

  3.   


    DB2 8.0 中有DECODE 函数?
      

  4.   

    这个是Oracle的,DB2用CASE WHEN吧。
      

  5.   

    附上代码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.月份
      

  6.   


    你一定是ORACLE高手
    呵呵 不过DB2中没有NVL函数
    很感谢你 已经知道怎么做了