我对发展很新,很抱歉,如果我的问题很愚蠢。 我已将多个列连接在一起,并且它也在一对多关系表之间进行连接。 无论如何,我现在得到的输出是
Patient_Name episode_id DOB primary_insu sec_insur patient_id
name, 001 03-29-1956 MEDICAID NULL 12
name, 001 03-29-1956 NULL STATEPROB 12
name2 001 02-20-1981 AETNA NULL 13
name2 001 02-20-1981 NULL MEDICAID 13
有一张表有2个保险记录,这是患者身份证的主要保险和二级保险。有什么方法可以为每个patient_id在一行中显示它。
当前查询...
SELECT LTRIM(RTRIM(isnull(pat.LNAME, ''))) + ', ' + LTRIM(RTRIM(isnull(pat.FNAME, ''))) + ', ' + LTRIM(RTRIM(isnull(pat.MNAME, ''))) AS Patient_Name,
pat.episode_id,
CONVERT (VARCHAR (11), pat.dob, 110) AS DOB,
CASE
WHEN covh.copay_priority = '1' THEN covp.payor_ID ELSE NULL
END AS primary_insu,
CASE
WHEN covh.copay_priority = '2' THEN covp.payor_ID
END AS sec_insur
FROM Patient AS pat WITH (NOLOCK)
INNER JOIN
coverage_history AS covh WITH (NOLOCK)
ON pat.patient_id = covh.patient_id
AND pat.episode_id = covh.episode_id
INNER JOIN
coverage AS cov WITH (NOLOCK)
ON cov.patient_id = covh.patient_id
AND cov.episode_id = covh.episode_id
AND cov.hosp_status_code = covh.hosp_status_code
AND cov.coverage_plan_id = covh.coverage_plan_id
LEFT OUTER JOIN
coverage_plan AS covp WITH (NOLOCK)
ON covp.coverage_plan_id = covh.coverage_plan_id
AND covp.hosp_status_code = covh.hosp_status_code
WHERE covh.hosp_status_code = 'op'
AND (covh.effective_to IS NULL
OR covh.effective_to > GETDATE());
答案 0 :(得分:0)
您可以两次加入桌面以获得主要内容,然后一次获得次要内容。使用左连接,因为并非所有患者都有保险。示例如下。您需要根据实际的表格结构和获取其他信息所需的任何其他连接进行调整。
SELECT p.Patient_name, i1.insurancename AS primary_insure, i2.insuranceName AS secondary_insure
FROM patient P
LEFT JOIN PatientInsurance i1 ON p.patient_id = i1.patient_id AND i1.insurance_type = 'Primary'
LEFT JOIN PatientInsurance i2 ON p.patient_id = i2.patient_id AND i2.insurance_type = 'Secondary'
答案 1 :(得分:0)
您可以使用MAX()
来组合行:
SELECT LTRIM(RTRIM(isnull(pat.LNAME, ''))) + ', ' + LTRIM(RTRIM(isnull(pat.FNAME, ''))) + ', ' + LTRIM(RTRIM(isnull(pat.MNAME, ''))) AS Patient_Name,
pat.episode_id,
CONVERT (VARCHAR (11), pat.dob, 110) AS DOB,
MAX(CASE
WHEN covh.copay_priority = '1' THEN covp.payor_ID ELSE NULL
END) AS primary_insu,
MAX(CASE
WHEN covh.copay_priority = '2' THEN covp.payor_ID
END) AS sec_insur
FROM Patient AS pat WITH (NOLOCK)
INNER JOIN
coverage_history AS covh WITH (NOLOCK)
ON pat.patient_id = covh.patient_id
AND pat.episode_id = covh.episode_id
INNER JOIN
coverage AS cov WITH (NOLOCK)
ON cov.patient_id = covh.patient_id
AND cov.episode_id = covh.episode_id
AND cov.hosp_status_code = covh.hosp_status_code
AND cov.coverage_plan_id = covh.coverage_plan_id
LEFT OUTER JOIN
coverage_plan AS covp WITH (NOLOCK)
ON covp.coverage_plan_id = covh.coverage_plan_id
AND covp.hosp_status_code = covh.hosp_status_code
WHERE covh.hosp_status_code = 'op'
AND (covh.effective_to IS NULL
OR covh.effective_to > GETDATE())
GROUP BY LTRIM(RTRIM(isnull(pat.LNAME, ''))) + ', ' + LTRIM(RTRIM(isnull(pat.FNAME, ''))) + ', ' + LTRIM(RTRIM(isnull(pat.MNAME, ''))),
pat.episode_id,
CONVERT (VARCHAR (11), pat.dob, 110)
答案 2 :(得分:0)
您可以使用不同的条件和别名连接到同一个表两次。
SELECT
LTRIM(RTRIM(isnull(pat.LNAME,''))) + ', ' + LTRIM(RTRIM(isnull(pat.FNAME,''))) + ', ' + LTRIM(RTRIM(isnull(pat.MNAME,''))) AS Patient_Name,
pat.episode_id,
convert(varchar(11),pat.dob,110) AS DOB,
pIns.payor_ID AS Primary,
sIns.payor_ID AS Secondary
from
Patient pat with (nolock)
left join coverage_history pIns with (nolock) on
(pat.patient_id=pIns.patient_id)
and
(pat.episode_id=pIns.episode_id)
and
(pIns.copay_priority = '1')
left join coverage_history sIns with (nolock) on
(pat.patient_id=sIns.patient_id)
and
(pat.episode_id=sIns.episode_id)
and
(sIns.copay_priority = '2')
(remainder of where clause)