如何 return 来自子查询的多个字段
How to return multiple fields from subquery
我在医疗保健部门工作,我们会检查患者的保险,看看他们的保险是否仍然有效,是否有资格获得我们的服务。不幸的是,数据库不太擅长将资格与预约或未来访问相关联(我们对此无法控制)。因此,我们无法了解资格检查最终会发生什么(我们是否使用了该保险?患者是否根本没有使用保险?等等)。
我们想要做的是尝试将资格与资格检查后一天内(即同一天或前一天)的患者就诊联系起来。我想检索该访问编号和该访问的主要付款人(我想要访问编号,以便我可以验证我是否获得了正确的访问以及正确的主要付款人)。
如何在主查询的结果中获取这两条信息?备选方案:如果我只从内联子查询返回付款人姓名,我如何抽查结果以验证它是否按预期工作?
资格查询
select distinct
elig.patient_id,
pm.payer_name,
elig.status,
elig.reject_reason
from
eligibility elig
inner join payer_mstr pm on elig.payer_id=pm.payer_id
where
elig.create_timestamp>='2019-01-01' and elig.create_timestamp<'2019-02-01'
相关的遭遇和付款人数据和表格
select distinct
pe.enc_nbr,
pm.payer_name
from
patient_encounter pe --visit data
--encounter_payer holds payer data for a specific visit, and 1 means primary payer
left join encounter_payer epay on pe.enc_id=epay.enc_id and cob=1
left join payer_mstr pm on epay.payer_id=pm.payer_id
我在 Microsoft SQL Server 2008 R2
很难测试您非常具体的问题,但试试这个:
SELECT DISTINCT
elig.patient_id,
pm.payer_name,
elig.status,
elig.reject_reason
pe.enc_nbr
FROM
patient_encounter pe
LEFT JOIN encounter_payer epay on pe.enc_id=epay.enc_id and cob=1
LEFT JOIN payer_mstr pm on epay.payer_id=pm.payer_id
LEFT JOIN eligibility elig on elig.payer_id=pm.payer_id
WHERE
elig.create_timestamp>='2019-01-01' and elig.create_timestamp<'2019-02-01'
您可以尝试使用常见的 table 表达式。像子查询一样工作,您可以添加您想要的所有字段。
WITH cte AS (
select
pe.enc_nbr,
pm.payer_name,
pm.payer_id,
ROW_NUMBER() OVER(PARTITION BY pm.payer_id ORDER BY pm.payer_id ASC) AS row_num --If you have a date created on each row I would change the pm.payer_id field that and change it to ORDER BY <field> DESC
from
patient_encounter pe --visit data
--encounter_payer holds payer data for a specific visit, and 1 means primary payer
left join encounter_payer epay on pe.enc_id=epay.enc_id and cob=1
left join payer_mstr pm on epay.payer_id=pm.payer_id
--Here you could add a WHERE clause to narrow your search date down to get previous or current date if you have a date field just use WHERE date >= DATEADD(d,-1,GETDATE())
)
select distinct
elig.patient_id,
pm.payer_name,
elig.status,
elig.reject_reason,
cte.enc_nbr
from
eligibility elig
inner join payer_mstr pm on elig.payer_id=pm.payer_id
left join cte ON cte.pm.payer_id = pm.payer_id --Now you can pull in any fields you need and can see if they have a record or do not
where
elig.create_timestamp>='2019-01-01' and elig.create_timestamp<'2019-02-01'
我在医疗保健部门工作,我们会检查患者的保险,看看他们的保险是否仍然有效,是否有资格获得我们的服务。不幸的是,数据库不太擅长将资格与预约或未来访问相关联(我们对此无法控制)。因此,我们无法了解资格检查最终会发生什么(我们是否使用了该保险?患者是否根本没有使用保险?等等)。
我们想要做的是尝试将资格与资格检查后一天内(即同一天或前一天)的患者就诊联系起来。我想检索该访问编号和该访问的主要付款人(我想要访问编号,以便我可以验证我是否获得了正确的访问以及正确的主要付款人)。
如何在主查询的结果中获取这两条信息?备选方案:如果我只从内联子查询返回付款人姓名,我如何抽查结果以验证它是否按预期工作?
资格查询
select distinct
elig.patient_id,
pm.payer_name,
elig.status,
elig.reject_reason
from
eligibility elig
inner join payer_mstr pm on elig.payer_id=pm.payer_id
where
elig.create_timestamp>='2019-01-01' and elig.create_timestamp<'2019-02-01'
相关的遭遇和付款人数据和表格
select distinct
pe.enc_nbr,
pm.payer_name
from
patient_encounter pe --visit data
--encounter_payer holds payer data for a specific visit, and 1 means primary payer
left join encounter_payer epay on pe.enc_id=epay.enc_id and cob=1
left join payer_mstr pm on epay.payer_id=pm.payer_id
我在 Microsoft SQL Server 2008 R2
很难测试您非常具体的问题,但试试这个:
SELECT DISTINCT
elig.patient_id,
pm.payer_name,
elig.status,
elig.reject_reason
pe.enc_nbr
FROM
patient_encounter pe
LEFT JOIN encounter_payer epay on pe.enc_id=epay.enc_id and cob=1
LEFT JOIN payer_mstr pm on epay.payer_id=pm.payer_id
LEFT JOIN eligibility elig on elig.payer_id=pm.payer_id
WHERE
elig.create_timestamp>='2019-01-01' and elig.create_timestamp<'2019-02-01'
您可以尝试使用常见的 table 表达式。像子查询一样工作,您可以添加您想要的所有字段。
WITH cte AS (
select
pe.enc_nbr,
pm.payer_name,
pm.payer_id,
ROW_NUMBER() OVER(PARTITION BY pm.payer_id ORDER BY pm.payer_id ASC) AS row_num --If you have a date created on each row I would change the pm.payer_id field that and change it to ORDER BY <field> DESC
from
patient_encounter pe --visit data
--encounter_payer holds payer data for a specific visit, and 1 means primary payer
left join encounter_payer epay on pe.enc_id=epay.enc_id and cob=1
left join payer_mstr pm on epay.payer_id=pm.payer_id
--Here you could add a WHERE clause to narrow your search date down to get previous or current date if you have a date field just use WHERE date >= DATEADD(d,-1,GETDATE())
)
select distinct
elig.patient_id,
pm.payer_name,
elig.status,
elig.reject_reason,
cte.enc_nbr
from
eligibility elig
inner join payer_mstr pm on elig.payer_id=pm.payer_id
left join cte ON cte.pm.payer_id = pm.payer_id --Now you can pull in any fields you need and can see if they have a record or do not
where
elig.create_timestamp>='2019-01-01' and elig.create_timestamp<'2019-02-01'