如果满足条件,请执行以下操作

时间:2014-02-06 20:14:55

标签: sql oracle

我正在努力创建一个查询,并希望从那些比我更聪明的人那里得到一些指导。我正在尝试编写一个查询,以便在DRG代码= 005时,从该查询中获取所有HOSP_ADMT_DT,然后在没有DRG = 5条件的情况下再次查询一般声明表并提取所有30天或之前的声明在录取日期之后录取日期和180天或更短时间,然后加入结果。

编辑: 我正在寻找的结果将运行下面的查询。我需要这个结果。然后获取下面查询产生的所有会员ID和Admit日期,并执行一个查询,在没有DRG条件= 005的情况下拉出所有原始字段,但是有成员ID的标准有DRG 5并且允许日期然后拉来自此子集的所有声明以及范围允许日期(定义为:HOSP_ADMT_DT) - 30和允许日期+ 180的所有声明.CLM_LN_SVC_FROM_DT            ,CLM_LN_SVC_TO_DT - 由

定义
SELECT CLM_MED_DETL_ID
       ,CLM_ID_TXT
       ,CLM_SRC_CD
       ,CLM_LN_SEQ_NUM
       ,MBR_ID
       ,MBR_LST_NAME
       ,MBR_FST_NAME
       ,SVCG_PROV_ADDR_ZIP_CD
       ,SVCG_PROV - ADDR_CNTY
       ,SBMTD_DRG_CD
       ,HOSP_ADMT_DT
       ,HOSP_DSCHRG_DT
       ,RVNU_CD
       ,CLM_LN_UNITS_NUM
       ,CLM_LN_CHRG_AMT
       ,CLM_LN_ALWD_AMT
       ,CLM_LN_PD_AMT
       ,TIN_TXT
       ,HOSP_ADMT_DT
       ,CLM_LN_SVC_FROM_DT
       ,CLM_LN_SVC_TO_DT
    FROM CLM_MED_DETL
    WHERE TIN_TXT IN ( 'A', 'B' )
        AND SBMTD_DRG_CD = '005'
        AND CLM_SRC_CD = 'TRG_FA'
    ORDER BY MBR_LST_NAME ASC
       ,CLM_LN_SEQ_NUM ASC;

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

... WHERE (SBMTD_DRG_CD='005' OR (SBMTD_DRG_CD <>'005 AND (claim is > 30 days OR laim.date < (180 + admit.date)) ))

我不知道您的日期是如何存储的。 (对不起,写在手机上,无法格式化代码)

答案 1 :(得分:0)

我认为你需要这样的事情:

  • CD_005子查询返回DRG条件= 005的医疗详细信息,我还在那里包含了您的附加条件,您可能需要修改它们
  • CD_ANY别名包含该表中的所有记录

当我们在MBR_IDHOSP_ADMT_DT范围内加入这些别名时,我们会收到[-30; +180]日期范围内的所有记录,这些日期范围为'005'对于曾经拥有'005'的客户的声明声称。

WITH CD_005 as (
    SELECT  MBR_ID, HOSP_ADMT_DT
        FROM CLM_MED_DETL
        WHERE TIN_TXT IN ( 'A', 'B' )
            AND SBMTD_DRG_CD = '005'
            AND CLM_SRC_CD = 'TRG_FA'
)
SELECT CLM_MED_DETL_ID
       ,CLM_ID_TXT
       ,CLM_SRC_CD
       ,CLM_LN_SEQ_NUM
       ,CD_ANY.MBR_ID
       ,MBR_LST_NAME
       ,MBR_FST_NAME
       ,SVCG_PROV_ADDR_ZIP_CD
       ,SVCG_PROV - ADDR_CNTY
       ,SBMTD_DRG_CD
       ,CD_ANY.HOSP_ADMT_DT
       ,HOSP_DSCHRG_DT
       ,RVNU_CD
       ,CLM_LN_UNITS_NUM
       ,CLM_LN_CHRG_AMT
       ,CLM_LN_ALWD_AMT
       ,CLM_LN_PD_AMT
       ,TIN_TXT
       ,HOSP_ADMT_DT
       ,CLM_LN_SVC_FROM_DT
       ,CLM_LN_SVC_TO_DT
   FROM CLM_MED_DETL CD_ANY 
   JOIN CD_005 
     on CD_ANY.MBR_ID = CD_005.MBR_ID 
    and CD_ANY.HOSP_ADMT_DT >= CD_005.HOSP_ADMT_DT -  30
    and CD_ANY.HOSP_ADMT_DT <= CD_005.HOSP_ADMT_DT + 180
  ORDER BY MBR_LST_NAME ASC
       ,CLM_LN_SEQ_NUM ASC;

希望它运行良好并且真的有帮助,我无法检查它,因为我没有这样的表。