-2

私の質問:

  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複数回同じ値になる可能性があることです。

同じものを1回だけカウントしていることを確認するにはどうすればよいaccession.ACCESSION_ID ですか?

あなたの助けと指導に感謝します。

4

2 に答える 2

4

ACCESSION_ID支払者グループが異なる支払いテーブルに同じ行が複数ある可能性があります。また、payor_group でグループ化しているため、複数のアクセッション ID を使用することになります。

ただし、確認するには、いくつかのサンプル データを確認する必要があります。

于 2012-06-18T19:38:25.147 に答える
3

問題はデータの重複です。

JOIN問題の原因を特定するには、それぞれを順番にコメントアウトして、結果を調べます。通常、余分なデータを作成しているのは明らかです。

データを見ないと難しいですが、たとえば、アクセッション テーブルに GeographyKey が含まれているのに Payments テーブルには含まれていない場合、ACCESSION_ID が 2 つの GegraphyKey にまたがって発生した場合、これらのテーブルを結合すると 2 行のデータが得られます。 ACCESSION_ID で。

1 つの解決策は、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
于 2012-06-18T19:54:15.910 に答える