如前所述,按年龄排序是最简单的。
但是,如果您需要分配波段编号或代码,或者需要按波段的总数或统计数据,或波段内的其他排序,那么您可能需要以不同的方式处理此问题。您可能想要一个 AgeBand 表,定义年龄范围,可能是乐队编号或代码,可能是年龄乐队的名称,或其他“主”数据。
如果是这种情况,你会得到你的乐队代码
left join AgeBand ab on details.age >= ab.FromAge and details.age <= ab.ToAge
...
order by ab.BandID, ...
但是,如果您不需要 AgeBand 表,并且想继续使用 CASE 语句计算年龄段代码,那也可以,并且可能就是您所需要的。
您可以做的是将当前查询放入公共表表达式或 CTE 中以准备数据,然后使用您分配给 CTE 的名称作为源表继续执行 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”,然后在底部被引用。控制最终结果的是底部全选。