[英]Age range from date of birth in Oracle sql
我正在尝试从出生日期( DOB
)获取年龄范围并按年龄分组,以将后者的查询转换为 JPA 查询
SELECT
SUM (CASE WHEN B.id = 1 THEN 1 END)
AS OPD,
SUM (CASE WHEN B.id = 2 THEN 1 END)
AS IPD,
SUM (CASE WHEN B.id = 3 THEN 1 END)
AS DC,
SUM (CASE WHEN B.id = 4 THEN 1 END)
AS PROC,
SUM (CASE WHEN B.id = 5 THEN 1 END)
AS SUR,
TRUNC ((MONTHS_BETWEEN (TRUNC (SYSDATE), TO_DATE (C.DOB)) / 12))
As Age,
CASE
WHEN AGE <= 5 THEN 'PEDIA 1 (AGE 0-5 Years)'
WHEN AGE >= 12 THEN 'ADULT'
ELSE 'PEDIA 2 (AGE 5-12 Years)'
END
AS AGE_GROUP,
SUM (CASE
WHEN B.id IN (1, 2, 3,4,5)THEN 1
END)
AS Total
FROM TRANSACTIONS A,
VISIT B,
PATIENTS C
WHERE A.TYPE = B.id
AND A.CODE_ONE = 5654
AND A.PATIENTID = C.PATIENTID
AND A.CODE_to = 64564
GROUP BY Age
我收到此错误
我希望结果是这样的
在表patients
中没有名为age
但dob
的预定义列,然后是否将每个age
单独替换为TRUNC( MONTHS_BETWEEN( sysdate, dob ) / 12 )
function 或将此转换放入一个子查询中,该子查询从patients
表中选择同时别名age
,如跟随一个
SELECT CASE
WHEN age <= 5 THEN
'PEDIA 1 (AGE 0-5 Years)'
WHEN age >= 12 THEN
'ADULT'
ELSE
'PEDIA 2 (AGE 5-12 Years)'
END AS age_group,
SUM(CASE WHEN v.id = 1 THEN 1 END) AS opd,
SUM(CASE WHEN v.id = 2 THEN 1 END) AS ipd,
SUM(CASE WHEN v.id = 3 THEN 1 END) AS daycare,
SUM(CASE WHEN v.id = 4 THEN 1 END) AS proc,
SUM(CASE WHEN v.id = 5 THEN 1 END) AS surgery,
SUM(CASE WHEN v.id BETWEEN 1 AND 5 THEN 1 END) AS total
FROM transactions t
JOIN visit v
ON v.id = t.type
JOIN ( SELECT p.*,
TRUNC(MONTHS_BETWEEN(sysdate,TO_DATE(dob,'yyyy-mm-dd')) / 12) AS age
FROM patients p ) p
ON p.patientid = t.patientid
WHERE t.code_one = 5654
AND t.code_to = 64564
GROUP BY age
假设dob
列是一个非日期类型的列,虽然不推荐这样做,但在整个表中具有yyyy-mm-dd
的固定格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.