我的疑问:
select
SUM(payments.paid_amt) as paid_amt,
SUM(payments.copay_amt) as copay_amt,
SUM(payments.CO_INSURANCE_AMT) as co_ins_amt,
payor_group.PAYOR_GROUP as payor_group,
DATEPART(MM,accession.XIFIN_LOAD_DATE) as load_month,
DATEPART(yyyy,accession.XIFIN_LOAD_DATE) as load_year,
accession.ACCESSION_ID
from
[F_PAYOR_PAYMENTS_monthly] payments
join D_PAYOR payor
on payor.PAYOR_ID=payments.PAYMENT_PAYOR_ID
join D_PAYOR_GROUP payor_group
on payor.PAYOR_GROUP_KEY=payor_group.PAYOR_GROUP_KEY
join F_ACCESSION_daily accession
on accession.ACCESSION_ID=payments.ACCESSION_ID
where accession.XIFIN_LOAD_DATE between '20120501' and '20120531'
group by payor_group.PAYOR_GROUP, DATEPART(MM,accession.XIFIN_LOAD_DATE),
DATEPART(yyyy,accession.XIFIN_LOAD_DATE),accession.ACCESSION_ID
出于某种原因,SUMs
多次计算accession.ACCESSION_ID
次。
当我正在进行所有这些连接时,我担心的是我可能多次SUMming
相同的值。
我怎样才能确保我只计算一次accession.ACCESSION_ID
?
非常感谢你的帮助和指导。
答案 0 :(得分:4)
您的付款表中可能有多个具有相同ACCESSION_ID
的行,且付款人组不同。由于您也是按payor_group进行分组,因此最终会出现多重登录ID。
然而,我们需要确定一些样本数据。
答案 1 :(得分:3)
问题是数据的重复。
要查找导致问题的JOIN
,我会依次对每个问题进行评论并检查结果。创建额外数据通常很明显。
如果没有看到数据那就很棘手,但是,例如,如果加入表中有一个GeographyKey,而Payments表没有,如果两个GegraphyKeys之间发生ACCESSION_ID,那么加入时你会得到两行数据这些表一起在ACCESSION_ID上。
一个解决方案可能是在您的OP中点击查询之前对#temp表进行一些初始分组,另一种选择是CTE,如下所示。
;with accession (XIFIN_LOAD_DATE, ACCESSION_ID)
as
(
select
XIFIN_LOAD_DATE
,ACCESSION_ID
from F_ACCESSION_daily
group by
XIFIN_LOAD_DATE
,ACCESSION_ID
)
, payments (PAYMENT_PAYOR_ID, ACCESSION_ID, paid_amt, copay_amt, CO_INSURANCE_AMT)
as
(
select
PAYMENT_PAYOR_ID
,ACCESSION_ID
,sum(paid_amt) paid_amt
,sum(copay_amt) copay_amt
,sum(CO_INSURANCE_AMT) CO_INSURANCE_AMT
from F_PAYOR_PAYMENTS_monthly
group by
PAYMENT_PAYOR_ID
,ACCESSION_ID
)
select
SUM(payments.paid_amt) as paid_amt,
SUM(payments.copay_amt) as copay_amt,
SUM(payments.CO_INSURANCE_AMT) as co_ins_amt,
payor_group.PAYOR_GROUP as payor_group,
DATEPART(MM,accession.XIFIN_LOAD_DATE) as load_month,
DATEPART(yyyy,accession.XIFIN_LOAD_DATE) as load_year,
accession.ACCESSION_ID
from
payments
join D_PAYOR payor
on payor.PAYOR_ID=payments.PAYMENT_PAYOR_ID
join D_PAYOR_GROUP payor_group
on payor.PAYOR_GROUP_KEY=payor_group.PAYOR_GROUP_KEY
join accession
on accession.ACCESSION_ID=payments.ACCESSION_ID
where accession.XIFIN_LOAD_DATE between '20120501' and '20120531'
group by
payor_group.PAYOR_GROUP
, DATEPART(MM,accession.XIFIN_LOAD_DATE),
DATEPART(yyyy,accession.XIFIN_LOAD_DATE),accession.ACCESSION_ID