1

生年月日列から計算された各年齢のカウントを表示しようとしていますが、生年月日でのみグループ化されるため、多くの重複した年齢が表示されるという問題があります。これが私のクエリです:

SELECT 
    DATEDIFF(hh, p.p_dob, GETDATE())/8766 AS Age,
    COUNT(DISTINCT s.s_studentreference) AS 'Count'    
FROM 
    moduleenrolment e
INNER JOIN 
    module m ON m.m_id = e.e_module
INNER JOIN 
    person p ON p.p_id = e.e_student
INNER JOIN 
    student s ON s.s_id = p.p_id
WHERE 
    m.m_reference LIKE '11%'
    AND LEN(m.m_reference) <= 12
    AND e.e_status IN ('A', 'W', 'C')
GROUP BY 
    p.p_dob
ORDER BY 
    p.p_dob DESC

これは結果のサンプルです

12  1
13  1
14  1
14  1
14  1
14  1
14  1
14  1
14  1
14  1
14  1

私が探していたのは

12 1
13 1
14 9
4

5 に答える 5

5

Group by and order by DATEDIFF(hh, p.p_dob, GETDATE())/8766 instead of p.p_dob

By grouping by p.p_dob, you're effectively grouping by the unique date of birth instead of the calculated age.

于 2013-01-24T14:45:46.980 に答える
1

使用しているSQLServerのバージョンで使用可能な場合は、RANK()/ DENSE_RANK()関数を確認してください。それはあなたが年齢層の中でランク付けするのに役立ちます。クエリを年齢で分割し、ランク付けします。同じ年齢のランクは同じになります。14歳のすべての行のランクは常に1、15、ランク2などになります。

于 2013-01-24T14:50:14.693 に答える
0

次のようなことを試すことができます:

SELECT TRUNC (MONTHS_BETWEEN (SYSDATE, SS.DATE_OF_BIRTH) / 12)
from (YOUR TABLE) SS

于 2013-05-07T08:00:49.680 に答える
0

年齢ではなく、実際の生年月日でグループ化しています。うまくいくかどうかはわかりませんが、計算を group by ステートメントに入れてみてください

于 2013-01-24T14:47:47.873 に答える