请教SQL问题,不连续的年龄

520NET 2012-02-07 02:22:23
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岁及以上

年龄要连续起来,如何修改,谢谢!
...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
20804036 2012-03-01
  • 打赏
  • 举报
回复
如果要连续,那其它维度成员是不是也需要全集,
如果那样的话所有维表成员都是用全集,就成了笛卡尔积了。
很多无意义的数据了。


我们的做法是,没算出来的,就没有行,但在前端展示的时候,
多维模型中维度成员是全的,也就是针对所选维度成员,如果没算
出度量值来,也会展示0.
这个又要看你的MDX怎么写了。
争取今天 2012-02-08
  • 打赏
  • 举报
回复
你的语句没有错,只是BJMEDICARE_SJ.M_PSNMONTHACCOUNTRECORD A,
M_SJ_M_PERSON B,
M_SJ_M_CORPORATION C
中有些年龄没有人.所以统计不出来.

如果你个某一个表中有1-100连续的年龄,可以用这个做外关联.
coolkisses 2012-02-07
  • 打赏
  • 举报
回复
不建议这么实现,没有一点可扩展性,也谈不上易于维护了。
建议专门建立一张维表,进行关联查询,以后想改也简单。
我心飞翔 2012-02-07
  • 打赏
  • 举报
回复
实测数据:

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');


实测结果:
minitoy 2012-02-07
  • 打赏
  • 举报
回复
order by CASE
WHEN B.AGE <= 16 THEN
16
WHEN B.AGE >= 65 THEN
65
ELSE
B.AGE
END
xpingping 2012-02-07
  • 打赏
  • 举报
回复
(select rownum rn from dual connect by rownum<=65)
minus
(select rownum rn from dual connect by rownum<16)

把上面这个结果跟你的那个搜索结果做左连接 关键字rn ,你那个结果的AGE
reg13141 2012-02-07
  • 打赏
  • 举报
回复
使用ORDER BY 排序不就行了么

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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