SELECT CASE
                 WHEN B.AGE <= 16 THEN
                  16
                 WHEN B.AGE >= 65 THEN
                  65
                 ELSE
                  B.AGE
               END AGE,
               COUNT(DISTINCT DECODE(B.SEX, '1', B.PSNSN)) MALECOUNT,
               COUNT(DISTINCT DECODE(B.SEX, '2', B.PSNSN)) FEMALE_COUNT,
               COUNT(DISTINCT B.PSNSN) PSN_COUNT
          FROM BJMEDICARE_SJ.M_PSNMONTHACCOUNTRECORD A,
               M_SJ_M_PERSON                         B,
               M_SJ_M_CORPORATION                    C
         WHERE A.PSNSN = B.PSNSN
           AND B.STATMONTH = C.STATMONTH
           AND B.CORPSN = C.CORPSN
           And B.FEEAREA in
               (1070, 2240, 2220, 2270, 2280, 1010, 1011, 1020, 1080, 1030, 1040, 1060, 1050, 1110, 2320, 1090, 2210, 2230, 2290, 2310, 2260)
           and A.FEEMONTH BETWEEN 201005 And 201005
         GROUP BY CASE
                    WHEN B.AGE <= 16 THEN
                     16
                    WHEN B.AGE >= 65 THEN
                     65
                    ELSE
                     B.AGE
                  END结果如下:
AGE MALE_COUNT FEMALE_COUNT PSN_COUNT
25 0 1 1
29 0 1 1
33 1 0 1
35 1 0 1我想要的结果如下:
AGE  MALE_COUNT FEMALE_COUNT PSN_COUNT
16岁及以下
17
18
...
...
64
65岁及以上年龄要连续起来,如何修改,谢谢!

解决方案 »

  1.   

    使用ORDER BY 排序不就行了么
      

  2.   

    (select rownum rn from dual connect by rownum<=65)
    minus
    (select rownum rn from dual connect by rownum<16)
    把上面这个结果跟你的那个搜索结果做左连接 关键字rn ,你那个结果的AGE
      

  3.   

    order by CASE
       WHEN B.AGE <= 16 THEN
       16
       WHEN B.AGE >= 65 THEN
       65
       ELSE
       B.AGE
       END
      

  4.   

    实测数据:CREATE TABLE T113
    (
        ID VARCHAR2(20),
        Age NUMBER(4),
        NAME VARCHAR2(20)
    );INSERT INTO T113 VALUES('01', 8, 'A');
    INSERT INTO T113 VALUES('02', 9, 'B');
    INSERT INTO T113 VALUES('03', 16, 'C');
    INSERT INTO T113 VALUES('04', 20, 'D');
    INSERT INTO T113 VALUES('05', 30, 'E');
    INSERT INTO T113 VALUES('06', 25, 'F');
    INSERT INTO T113 VALUES('07', 65, 'G');
    INSERT INTO T113 VALUES('08', 67, 'H');
    INSERT INTO T113 VALUES('09', 66, 'I');
    实测结果:
      

  5.   

    你的语句没有错,只是BJMEDICARE_SJ.M_PSNMONTHACCOUNTRECORD A,
      M_SJ_M_PERSON B,
      M_SJ_M_CORPORATION C
    中有些年龄没有人.所以统计不出来.如果你个某一个表中有1-100连续的年龄,可以用这个做外关联.
      

  6.   

    如果要连续,那其它维度成员是不是也需要全集,
    如果那样的话所有维表成员都是用全集,就成了笛卡尔积了。
    很多无意义的数据了。
    我们的做法是,没算出来的,就没有行,但在前端展示的时候,
    多维模型中维度成员是全的,也就是针对所选维度成员,如果没算
    出度量值来,也会展示0.
    这个又要看你的MDX怎么写了。