繁体   English   中英

从出生日期起的年龄范围 Oracle sql

[英]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中没有名为agedob的预定义列,然后是否将每个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM