您好我正在使用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
非常感谢。
答案 0 :(得分:1)
就这样做
ORDER BY age
即使age_bands
CASE表达式不是
答案 1 :(得分:1)
如前所述,按年龄排序最简单。
但是,如果您需要分配一个乐队编号或代码,或者需要乐队中的总数或统计数据,或者乐队中的其他类别,那么您可能希望以不同的方式处理此问题。您可能希望拥有AgeBand表,定义年龄范围,可能是乐队编号或代码,可能是年龄段的名称,或其他“主”数据。
如果是这种情况,您可以使用
获取带代码left join AgeBand ab on details.age >= ab.FromAge and details.age <= ab.ToAge
...
order by ab.BandID, ...
但是如果您不需要AgeBand表,并且想继续使用CASE语句计算年龄段代码,那也没关系,可能就是您所需要的。
您可以做的是将当前查询放在公用表表达式或CTE中以准备数据,然后使用您指定给CTE的名称作为from-table继续SELECT语句。
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”,然后在底部引用。它是底部全选,控制您的最终结果。
答案 2 :(得分:0)
我认为最简单的方法是:
order by min(age)