システムのみ特定のレコードが存在する場合、年齢があることを知っています。あなたが1..100の間の年齢のリストを持っている場合は、あなたは0..100歳を探しているシステムを教えたり提供したりする必要があります。あなたが探している年齢のリストを提供することによって、要求された年齢が検索されたレコードで見つからない場合、システムは自動的に0/nullを返します。
他にも言及しているように、1..100という行を持つテーブルをSQLで比較したり、SQLで数値のリストを生成することができます。
一部のDBMSでは、1つの列と1つの行を持つdualというデフォルトの表が用意されています。この表は、from表を持たない問合せに使用できます。 アクセスアプリケーションでテーブルを作成して "dual"とし、1行を挿入します。
今、このクエリを実行します。
SELECT TMain.counter
FROM (SELECT (T2.mAge*t3.mFactor10)+t1.mAge AS counter
FROM (select 1 as mAge from dual
union all select 2 from dual
union all select 3 from dual
union all select 4 from dual
union all select 5 from dual
union all select 6 from dual
union all select 7 from dual
union all select 8 from dual
union all select 9 from dual
union all select 10 from dual) AS T1,
(select 0 as mAge from dual
union all select 1 from dual
union all select 2 from dual
union all select 3 from dual
union all select 4 from dual
union all select 5 from dual
union all select 6 from dual
union all select 7 from dual
union all select 8 from dual
union all select 9 from dual
union all select 10 from dual) AS T2,
(select 10 as mFactor10 from dual) AS T3) AS TMain
WHERE (((TMain.counter) Between 1 And 100));
が、これは1 100から100行が生成されます。
この結果をSQLの外部表として使用して、このリストにある年齢のユーザーを検索/カウントすることができます。 ロジックは次のようになります。SQLで
select all age
from the reqeusted age list
find and count/return all matched records or return 0 if no records found.
、それはこのようなものになるだろう、
SELECT TMain.counter as Age,
(SELECT Count(*) AS [Count]
FROM (SELECT Int(DateDiff("d", Clients.dob, now())/365.25) AS AgeNum
FROM Clients) AS [%$##@_Alias]
WHERE (TMain.counter = [%$##@_Alias].ageNum)
GROUP BY [%$##@_Alias].AgeNum) as number_of_clients
FROM (SELECT (T2.mAge*t3.mFactor10)+t1.mAge AS counter
FROM (select 1 as mAge from dual
union all select 2 from dual
union all select 3 from dual
union all select 4 from dual
union all select 5 from dual
union all select 6 from dual
union all select 7 from dual
union all select 8 from dual
union all select 9 from dual
union all select 10 from dual) AS T1,
(select 0 as mAge from dual
union all select 1 from dual
union all select 2 from dual
union all select 3 from dual
union all select 4 from dual
union all select 5 from dual
union all select 6 from dual
union all select 7 from dual
union all select 8 from dual
union all select 9 from dual
union all select 10 from dual) AS T2,
(select 10 as mFactor10 from dual) AS T3) AS TMain
WHERE (((TMain.counter) Between 1 And 100));
これが生成されます。クライアントの1..100から年齢だけでなく、多数の各年齢のためにとnullの場合はnull、空の場合は空です。 もちろん、年齢リストを動的に延長または短縮することができます。
'%$ ## @ _エイリアス'面白い名前の選択! – onedaywhen