2016-04-15 82 views
0

我想讓這個sql邏輯工作,最後一部分是我沒有我的邏輯正確的地方。Cognos Report Studio 10.2.2 case語句sql邏輯

我需要爲已列爲ID_1 & ID_2的提供程序重新提供重新發送。如果一個人在30天內有重新發帖,那麼即使他們去了另一個地方,他們也會得到一個readmit_conf_30號碼。如果他們在30天之內有重新發帖,我需要在報告中包含原始提供商號碼和其他提供商。

我已經嘗試了很多方法,並且對如何使用它而感到茫然。 Group1適用於我在尋找的提供商。 Group2適用於其他提供商。第3組將它們組合在一起,第4組我嘗試將它們分配給Y/N,無論我是否希望他們報告。這是我需要案例邏輯幫助的地方。

感謝您的幫助。

代碼:

WITH Group1 AS 
(
    SELECT 
     A.MEMBER, B.SEX, B.DOB, B.LAST_NAME, B.FIRST_NAME,    
     A.PROVIDER_ID, C.PROVIDER_NAME, A.CONF_NUM, A.BEG_DT, A.END_DT, A.TOS_I_4, A.DIS_STAT, A.AMT_EQV, A.AMT_PAY, A.AMT_REQ 
     , A.READMIT_INDEX_30, A.READMIT_30, A.READMIT_CONF_30, '04/30/2014' as DateCheck 
     , '341425870018' AS ID_1 
     , '341425870052' AS ID_2 
FROM CONFINEMENTS A 
LEFT JOIN MEMINFO B ON A.MEMBER = B.MEMBER 
LEFT JOIN PROVINFO C ON A.PROVIDER_ID = C.PROVIDER_ID 
LEFT JOIN MAP_DATE_RANGE D ON D.IA_TIME = A.IA_TIME 
WHERE 
    A.CUST_OPL_MED IN ('A$*', 'B$*', 'N$*', 'P$*', 'D$*', ' 'Unspecified$UNK') 
    AND A.BEG_DT >= '05/01/2013' and A.beg_dt <'05/01/2014' 
    and A.PROVIDER_ID Like '341425870%' 
    and (A.READMIT_30 = 1 OR A.READMIT_30 = 0) 
    --AND A.DIS_STAT <> 20 
), 
GROUP2 AS (
    SELECT 
     A.MEMBER, B.SEX, B.DOB, B.LAST_NAME, B.FIRST_NAME, A.PROVIDER_ID, C.PROVIDER_NAME 
    , A.CONF_NUM, A.BEG_DT, A.END_DT, A.TOS_I_4, A.DIS_STAT, A.AMT_EQV, A.AMT_PAY, A.AMT_REQ 
    , A.READMIT_INDEX_30, A.READMIT_30, A.READMIT_CONF_30, '04/30/2014' as DateCheck 
    , '341425870018' AS ID_1 
    , '341425870052' AS ID_2 
FROM CONFINEMENTS A 
LEFT JOIN MEMINFO B ON A.MEMBER = B.MEMBER 
LEFT JOIN PROVINFO C ON A.PROVIDER_ID = C.PROVIDER_ID 
LEFT JOIN MAP_DATE_RANGE D ON D.IA_TIME = A.IA_TIME 
WHERE 
    A.CUST_OPL_MED IN ('A$*', 'B$*', 'N$*', 'P$*', 'D$*', 'Unspecified$UNK') 
    AND A.BEG_DT >= '05/01/2013' and A.beg_dt <'05/01/2014' 
    --and A.PROVIDER_ID Like '341425870%' 
    and (A.READMIT_30 = 1 OR A.READMIT_30 = 0) 
    --AND A.DIS_STAT <> 20 
), 
GROUP3 AS (
    Select *, DATEADD(dd, 30, datecheck) AS MaxdateAllowed from Group1 
    union 
    select *, DATEADD(dd, 30, datecheck) AS MaxdateAllowed from GROUP2 
), 
    Group4 AS (
    select * 
    , case when PROVIDER_ID <> ID_1 and readmit_conf_30 is not null THEN 'Y' 
     when PROVIDER_ID <> ID_2 and readmit_conf_30 is not null THEN 'Y' 
     when PROVIDER_ID = ID_1 and readmit_conf_30 is not null THEN 'Y' 
     when PROVIDER_ID = ID_2 and readmit_conf_30 is not null THEN 'Y' 
     when PROVIDER_ID = ID_1 THEN 'Y' 
     when PROVIDER_ID = ID_2 THEN 'Y' 
     when PROVIDER_ID <> ID_1 THEN 'N' 
     when PROVIDER_ID <> ID_2 THEN 'N' 
     ELSE 'B' 
    END AS GoodRecord 
    FROM Group3 
    where maxdateallowed > beg_dt and READMIT_INDEX_30 = 1 
    --and (READMIT_30 = 1 OR READMIT_30 = 0) 
) 
SELECT * FROM Group4 
WHERE GoodRecord = 'Y' 
order by conf_num 

回答

0

我想通了。 SQL代碼如下: -

WITH Group1 AS (
     SELECT A.MEMBER, B.SEX, B.DOB, B.LAST_NAME, B.FIRST_NAME, A.PROVIDER_ID, C.PROVIDER_NAME 
     , A.CONF_NUM, A.BEG_DT, A.END_DT, A.TOS_I_4, A.DIS_STAT, A.AMT_EQV,  A.AMT_PAY, A.AMT_REQ 
     , A.READMIT_INDEX_30, A.READMIT_30, A.READMIT_CONF_30 
     FROM CONFINEMENTS A 
     LEFT JOIN MEMINFO B ON A.MEMBER = B.MEMBER 
     LEFT JOIN PROVINFO C ON A.PROVIDER_ID = C.PROVIDER_ID 
     LEFT JOIN MAP_DATE_RANGE D ON D.IA_TIME = A.IA_TIME 
     WHERE A.CUST_OPL_MED IN ('A$*', 'B$*', 'N$*', 'P$*', 'D$*', 'Unspecified$UNK') 
     AND A.BEG_DT >= '05/01/2013' and A.beg_dt <'05/01/2014' 
     and A.PROVIDER_ID Like '341425870%' 
     and (A.READMIT_30 = 1 OR A.READMIT_30 = 0) 
), 
GROUP2 AS (
     SELECT AA.MEMBER, AA.READMIT_CONF_30 
     FROM Group1 AA 
     WHERE AA.READMIT_CONF_30 > 0 
), 
Group3 AS (
     Select AA.MEMBER, A.READMIT_CONF_30, A.CONF_NUM 
     ,B.SEX, B.DOB, B.LAST_NAME, B.FIRST_NAME, A.PROVIDER_ID, C.PROVIDER_NAME 
     , A.BEG_DT, A.END_DT, A.TOS_I_4, A.DIS_STAT, A.AMT_EQV, A.AMT_PAY, A.AMT_REQ 
     , A.READMIT_30, A.READMIT_INDEX_30 
     FROM GROUP2 AA 
     LEFT JOIN CONFINEMENTS A ON A.MEMBER = AA.MEMBER AND AA.READMIT_CONF_30 = A.CONF_NUM 
     LEFT JOIN MEMINFO B ON A.MEMBER = B.MEMBER 
     LEFT JOIN PROVINFO C ON A.PROVIDER_ID = C.PROVIDER_ID 
     LEFT JOIN MAP_DATE_RANGE D ON D.IA_TIME = A.IA_TIME 
     WHERE A.CUST_OPL_MED IN ('A$*', 'B$*', 'N$*', 'P$*', 'D$*', 'Unspecified$UNK') 

     and (A.READMIT_30 = 1 OR A.READMIT_30 = 0) 
) 
     select 
     MEMBER, READMIT_CONF_30 
     ,SEX, DOB, LAST_NAME, FIRST_NAME, PROVIDER_ID, PROVIDER_NAME 
     , CONF_NUM, BEG_DT, END_DT, TOS_I_4, DIS_STAT, AMT_EQV, AMT_PAY, AMT_REQ 
     , READMIT_30, READMIT_INDEX_30 
     from group1 
     union 
     select 
     MEMBER, READMIT_CONF_30 
    ,SEX, DOB, LAST_NAME, FIRST_NAME, PROVIDER_ID, PROVIDER_NAME 
    , CONF_NUM, BEG_DT, END_DT, TOS_I_4, DIS_STAT, AMT_EQV, AMT_PAY, AMT_REQ 
    , READMIT_30, READMIT_INDEX_30 
    from Group3 
    order by conf_num