Ich versuche, diese SQL-Logik zum Laufen zu bringen, und der letzte Teil ist, wo ich meine Logik nicht richtig habe.Cognos Report Studio 10.2.2 Fallanweisung sql logic
Ich muss Rückmeldungen für Anbieter, die als ID_1 & ID_2 aufgelistet haben, zurückholen. Wenn eine Person innerhalb von 30 Tagen eine Rückmeldung erhält, erhält sie eine readmit_conf_30-Nummer, auch wenn sie an einen anderen Ort gegangen ist. Ich muss die ursprünglichen Provider-Nummern und die anderen Anbieter im Bericht haben, wenn sie innerhalb von 30 Tagen wieder eingelesen werden.
Ich habe viele Möglichkeiten ausprobiert und weiß nicht, wie ich es formulieren soll. Group1 ist für Anbieter, nach denen ich suche. Group2 ist für andere Anbieter. Group3 verbindet sie zusammen und Group4 ich versuche, ihnen Y/N zuzuweisen, ob ich sie auf Bericht möchte. Dort brauche ich Hilfe in der Falllogik.
Danke für die Hilfe.
Code:
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