SELECT count(*) AS 人数 , '18から25' AS 年齢区分
FROM 従業員名簿
WHERE 年齢>=18 And 年齢<=25;
ANo.2 の方が回答されているように、このような単一Select文の結果を単一のセットにするには union しかないです。
ですから、単一Select文で実現するには少々工夫が必要です。
従業員名簿:
ID___氏名__________年齢
1____鈴木 一郎_______22
2____中村 主水_______26
3____木村 純一_______33
4____山田 太郎_______33
SELECT Count(*) AS 人数
FROM 従業員名簿
GROUP BY ((年齢>=18)*(年齢<=25)+(年齢>=26)*(年齢<=30)*2+(年齢>=31)*(年齢<=40)*3);
クエリ1:
人数
_____1
_____1
_____2
これじゃ、年齢区分が判りませんので、次のようにして年齢区分を生成する列を追加しなければなりません。
SELECT
CutStr("18~25/26~30/31~40","/",((年齢>=18)*(年齢<=25)+(年齢>=26)*(年齢<=30)*2+(年齢>=31)*(年齢<=40)*3)) AS 年齢区分,
Count(*) AS 人数
FROM 従業員名簿
GROUP BY ((年齢>=18)*(年齢<=25)+(年齢>=26)*(年齢<=30)*2+(年齢>=31)*(年齢<=40)*3);
クエリ2:
年齢区分___人数
18~25___________1
26~30___________1
31~40___________2
次の CutStr関数を標準モジュールに加えれば、こういう芸当も可能。
Public Function CutStr(ByVal TEXT As String, _
ByVal Separator As String, _
ByVal N As Integer) As String
Dim strDatas() As String
strDatas = Split("" & Separator & TEXT, Separator, , 0)
CutStr = strDatas(N * Abs((N <= UBound(strDatas))))
End Function
さて、いずれにしろ、従業員名簿に列[年齢区分](=1,2,3)を設ければ済むこと。
このようにクエリにマジックナンバーを埋め込むとメンテナンス上で重大な問題を残すことにも・・・。