问题描述
- 年龄段查询,在时间段的年龄没有数据,就输出0
-
SELECT CASE WHEN AGE <= 10 THEN '1' WHEN AGE > 10 AND AGE <= 20 THEN '2' WHEN AGE > 20 AND AGE <= 30 THEN '3' WHEN AGE > 30 AND AGE <= 40 THEN '4' WHEN AGE > 40 AND AGE <= 50 THEN '5' WHEN AGE > 50 AND AGE <= 60 THEN '6' WHEN AGE > 60 AND AGE <= 70 THEN '7' WHEN AGE > 70 AND AGE <= 80 THEN '8' WHEN AGE > 80 AND AGE <= 90 THEN '9' WHEN AGE > 90 AND AGE <= 100 THEN 'a' WHEN AGE > 100 THEN 'b' END allshuju ,COUNT(*) renshu,OUT_WAY leibie FROM WORK_BASY_DATA where OUT_DT >= '2012-10-1' and OUT_DT <='2012-10-31' GROUP BY allshuju,OUT_WAY having OUT_WAY!='' AND allshuju!=''
解决方案
建议你:
1) 最好是排一下版面
2) 说明具体的问题
解决方案二:
你把条件逐个去掉,或者逐个增加,看看哪个条件影响了你的结果
解决方案三:
年龄段查询,在时间段的年龄没有数据,就输出0
你写的SQL有语法错误吧
1--首先指出这个SQL不文有错误
GROUP BY allshuju,OUT_WAY
那么你的select列表的AGE是不是就错了阿。使用了groupby 时候,select的列表项目应该和group by 一致或者是其他项目的聚集函数
你现在的列表中有 AGE,OUT_WAY leibie
你看这两个OUT_WAY leibie 之间没有逗号阿
2--这个查询要逐层进行分解然后再组合进行。采用倒推法来看看
你可以这样思考,什么样的表输出结构你可以简单聚集得到你想要的结果
你看是不是下面这种
leibie AGE renshu
x 1 10
y 2 2
... ... ...
你在想想如何得到上面的结构呢?
肯定有分组和聚集操作
第一步:
按照你写的SQL文,把这个leibie ,age 也写入到 group by的子句中,我们得到如下输出
liebie age
x 1
y 1
z 2
d 1
... ...
等这样的数据结构
第二步
将第一步的结果作为查询结果集,比如 temp吧
select temp.age ,count(*) as renshu
from temp group by temp.age
至于你想输出什么结果自己发挥把
时间: 2024-11-02 21:59:36