您好,我正在使用sql db2创建age_bands:
case when age between 0 and 1 then '0-1'
when age between 2 and 3 then '2-3'
.
.
.
when age between 10 and 11 then '10-11'
当然,当你订购时,你会得到以下信息:
0-1
10-11
2-3
这不是我想要的。如何按实际age_bands排序以获取:
0-1
2-3
10-11
非常感谢。
发布于 2013-04-22 22:06:42
就这么做吧
ORDER BY age
当然,年龄仍然在上升,即使age_bands
CASE表达式不是
发布于 2013-04-22 23:58:02
如前所述,按年龄排序是最简单的。
但是,如果您需要分配波段编号或代码,或者需要按波段进行总计或统计,或者需要在波段内进行其他排序,那么您可能希望以不同的方式处理此问题。您可能想要有一个AgeBand表,定义年龄范围,可能是带号或代码,可能是年龄带的名称,或者是其他“主”数据。
如果是这种情况,您将使用
left join AgeBand ab on details.age >= ab.FromAge and details.age <= ab.ToAge
...
order by ab.BandID, ...
但是,如果您不需要AgeBand表,并且希望继续使用CASE语句计算年龄带代码,那么也可以,这可能就是您所需要的。
您可以做的是将当前查询放在一个公用表表达式( CTE )中,以准备数据,然后继续执行SELECT语句,使用分配给CTE的名称作为from表。
WITH q AS
(SELECT ...
CASE WHEN ... THEN "00-01"
WHEN ... THEN "02-03"
...
WHEN ... THEN "10-11"
END as bandcode
FROM yourinputdata as i
WHERE ...
)
SELECT bandcode, ...
FROM q
ORDER BY bandcode, ...
;
引号之间的WITH和查询是公用表表达式。它在第一行中被命名为"q“,然后在底部被引用。控制最终结果的是底部的full-select。
发布于 2013-04-22 22:00:46
我认为最简单的方法是:
order by min(age)
https://stackoverflow.com/questions/16149058
复制相似问题