系統知道存在某個特定記錄的年齡。如果你想有一個年齡在1到100之間的列表,你需要告訴或提供你正在尋找0..100年齡的系統。通過提供您正在查找的年齡列表,如果在查找到的記錄中未找到請求的年齡,系統將自動返回0/null。
正如其他人提到的,你可以有一個1..100行的表格,並在你的SQL中進行比較,或者你可以用SQL生成一個數字列表。
某些DBMS提供了一個名爲dual的默認表,它具有一列和一行,您可以將該表用於任何沒有表的表。 在您的訪問應用程序中,創建一個名爲「dual」的表並插入一行。
現在執行這個查詢:
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的外部表,並查找/計算年齡在此列表中的任何人。 邏輯是:
select all age
from the reqeusted age list
find and count/return all matched records or return 0 if no records found.
在SQL中,這將是這樣的,
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爲空/空無結果。 當然,您可以動態擴展或縮短年齡列表。
'%$ ## @ _ Alias'有趣的名字選擇! – onedaywhen