Заранее спасибо за помощь.
Это запрос, который дает дополнительный результат:
SELECT DISTINCT npi.id_provider AS npi_provider,
mcnpi.num_contract_max AS num_contract_max,
mcd.id_provider AS mcd_provider,
provservloc.dte_effective AS dte_effective,
provservloc.dte_end AS dte_end,
--Case modified to pull condition from t_pmp_svc_loc for when dte_end > today
CASE
WHEN provservloc.dte_end > 20180611 THEN
CASE WHEN mcfte.dte_end > 20180611 THEN mcfte.num_hrs_week ELSE 0 END
ELSE 0 END AS num_hrs_week,
--Case added to handle Num_Current_Panel results
CASE
WHEN provservloc.dte_end > 20180611 THEN
CASE WHEN mcfte.dte_end > 20180611 THEN pmppanelrestrict.num_current_panel ELSE 0 END
ELSE 0 END AS num_current_panel,
--Case added to handle Num_Future_Panel
CASE
WHEN provservloc.dte_end > 20180611 THEN
CASE WHEN mcfte.dte_end > 20180611 THEN pmppanelrestrict.num_future_panel ELSE 0 END
ELSE 0 END AS num_future_panel,
--Case added to handle Num_Max_Panel numbers
CASE
WHEN provservloc.dte_end > 20180611 THEN
CASE WHEN mcfte.dte_end > 20180611 THEN pmppanelrestrict.num_max_panel ELSE 0 END
ELSE 0 END AS num_max_panel,
pmppanelrestrict.ind_panel_hold AS ind_panel_hold,
mcnpi.sak_npi AS sak_npi ,
provservloc.sak_prov,
provservloc.sak_prov_loc
FROM t_pmp_svc_loc provservloc
LEFT JOIN T_PR_IDENTIFIER MCD ON PROVSERVLOC.SAK_PROV_LOC = MCD.SAK_PROV_LOC AND PROVSERVLOC.SAK_PROV = MCD.SAK_PROV
INNER JOIN t_pr_identifier npi on npi.sak_prov_loc = mcd.sak_prov_loc AND npi.sak_prov = mcd.sak_prov
LEFT JOIN t_mc_fte mcfte ON provservloc.sak_prov = mcfte.sak_prov AND provservloc.sak_prov_loc = mcfte.sak_prov_loc
LEFT JOIN t_mc_pmp_panel_restrict pmppanelrestrict ON provservloc.sak_pmp_ser_loc = pmppanelrestrict.sak_pmp_ser_loc
LEFT JOIN t_mc_npi mcnpi ON mcnpi.sak_npi = mcd.sak_npi
LEFT JOIN t_pr_php_elig elig ON provservloc.sak_prov_loc = elig.sak_prov_loc
WHERE
PROVSERVLOC.SAK_PUB_HLTH = 23
AND elig.sak_prov_pgm = 57
AND elig.cde_enroll_status IN ( 'A' ,'G', 'X' )
AND mcfte.cde_status1 != 'H'
AND mcd.cde_prov_id_type = 'MCD'
AND NPI.CDE_PROV_ID_TYPE = 'NPI'
AND npi.id_provider = '123456789'
UNION
SELECT DISTINCT npi.id_provider AS npi_provider,
mcnpi.num_contract_max AS num_contract_max,
mcd.id_provider AS mcd_provider,
provservloc.dte_effective AS dte_effective,
provservloc.dte_end AS dte_end,
NULL AS NUM_HRS_WEEK,
NULL AS num_current_panel,
NULL AS NUM_FUTURE_PANEL,
NULL AS num_max_panel,
NULL AS ind_panel_hold,
mcnpi.sak_npi AS sak_npi ,
provservloc.sak_prov,
provservloc.sak_prov_loc
FROM t_pmp_svc_loc provservloc
LEFT JOIN T_PR_IDENTIFIER MCD ON PROVSERVLOC.SAK_PROV_LOC = MCD.SAK_PROV_LOC AND PROVSERVLOC.SAK_PROV = MCD.SAK_PROV
INNER JOIN T_PR_IDENTIFIER NPI ON NPI.SAK_PROV_LOC = MCD.SAK_PROV_LOC AND NPI.SAK_PROV = MCD.SAK_PROV
LEFT JOIN t_mc_npi mcnpi ON mcnpi.sak_npi = mcd.sak_npi
LEFT JOIN T_PR_PHP_ELIG ELIG ON PROVSERVLOC.SAK_PROV_LOC = ELIG.SAK_PROV_LOC
WHERE PROVSERVLOC.SAK_PROV NOT IN (SELECT A.SAK_PROV FROM T_MC_FTE A INNER JOIN T_PMP_SVC_LOC B ON A.SAK_PROV = B.SAK_PROV)
AND PROVSERVLOC.SAK_PROV_LOC not in (select a.sak_prov_loc from t_mc_fte a inner join t_pmp_svc_loc b on a.sak_prov_loc = b.sak_prov_loc)
and provservloc.sak_pub_hlth = 23
AND elig.sak_prov_pgm = 57
AND ELIG.CDE_ENROLL_STATUS IN ( 'A' ,'G', 'X' )
--AND mcfte.cde_status1 != 'H'
AND mcd.cde_prov_id_type = 'MCD'
AND NPI.CDE_PROV_ID_TYPE = 'NPI'
AND npi.id_provider = '123456789';
В списке результатов я получаю 5 строк. Это выглядит так:
Query_Result
Я знаю, что проблема в основном в двух таблицах:
1. T_MC_FTE
SAK_PROV_LOC SAK_PROV DTE_EFFECTIVE DTE_END
------------ ---------- ------------- ----------
32254 32254 20150401 20160331
32254 32254 20171001 22991231
T_PMP_SVC_LOC
SAK_PROV_LOC SAK_PROV DTE_EFFECTIVE DTE_END
------------ ---------- ------------- ----------
30859 30859 20050101 20090630
32254 32254 20050401 20110630
32254 32254 20150401 20160331
32254 32254 20171001 22991231
значение, которое мне не нужно, это значение в таблице T_MC_FTE с DTE_END = 20160331.
Итак, в основном я ищу, чтобы получить все результаты от T_PMP_SVC_LOC, и те, которые соответствуют T_MC_FTE, только если T_MC_FTE.DTE_END> сегодня.
В итоге результатом должны быть все 4 строки из T_PMP_SVC_LOC с соответствующими значениями столбцов для одной записи, которая сопоставляется в T_MC_FTE с DTE_END> сегодня;
Есть предложения по улучшению UNION?