2016-12-07 6 views
1

最初に、ここに私のコードです:私はステートメントを実行し、メインWHERE CP.OFFICE_ID = 'EDQV'後にすべてのものを除外した場合文の中で働いていませんSQLが、作品だけで罰金

SELECT --PAT.V51_PRSNPERSONNUMBER AS PSNNMBR, 
    (PAT.V51_PRSNFIRSTNAME + ' ' + PAT.V51_PRSNLASTNAME) AS NAME, 
    --ADDR.V8_PERSONHOMEADDRLINE1 AS ADDRESS, 
    --ADDR.V8_PERSONHOMEADDRLINE2 AS ADDRESS2, 
    --ADDR.V8_PERSONHOMEADDRCITY AS CITY, 
    --ADDR.V8_PERSONHOMEADDRSTATE AS STATE, 
    --ADDR.V8_PERSONHOMEADDRZIP AS ZIP, 
    --PAT.V51_PRSNDOB AS DOB, 
    --PAT.V51_PRSNSEX AS SEX, 
    ADDR.V8_PERSONHOMEPHONENUMBER AS PHONE, 
    ADDR.V8_PERSONMOBILEPHONENUMBER AS CELLPHONE, 
    --CV.V9_DNPLANSORTNAME AS INSPLAN, 
    --CV.V9_DNCARRIERNAME AS INSCARRIER, 
    PAT.V51_PRSNEMAIL AS EMAIL, 
    'RSQ TEST' AS GROUPS 
FROM I_DNCHGSPMTS CP 
    LEFT OUTER JOIN IPROCEDURE PR 
     ON (CP.DNCP_PROCEDURECODE = PR.PRPROCEDURECODE AND CP.OFFICE_ID = PR.OFFICE_ID) 
    LEFT OUTER JOIN I_VSTAFFCHGBILL STFBILL 
     ON (CP.OFFICE_ID = STFBILL.OFFICE_ID AND CP.DNCP_PRACTICEID = STFBILL.V69_STPRACTICEID AND 
      CP.DNCP_STAFFID_CREDITED = STFBILL.V69_STSTAFFID) 
    LEFT OUTER JOIN I_VPROVCHGBILL BILL 
     ON (STFBILL.V69_STSTAFFID = BILL.V58_PROVPROVIDERID AND STFBILL.OFFICE_ID = BILL.OFFICE_ID) 
    LEFT OUTER JOIN I_DNCHGCOVERAGE CHGCV 
     ON (CP.OFFICE_ID = CHGCV.OFFICE_ID AND CP.DNCP_CHARGESID = CHGCV.TPSCHARGESID) 
    LEFT OUTER JOIN I_VDNPLANCHGCV1 CV 
     ON (CHGCV.CHGCVR1PLANID = CV.V9_DNPLANID AND CHGCV.OFFICE_ID = CV.OFFICE_ID) 
    LEFT OUTER JOIN I_VDEPTCHG DEP 
     ON (CP.DNCP_DEPARTMENTCODE = DEP.V4_DPTDEPARTMENTCODE AND CP.OFFICE_ID = DEP.OFFICE_ID) 
    LEFT OUTER JOIN I_VDNADDRSPAT ADDR 
     ON (CP.OFFICE_ID = ADDR.OFFICE_ID AND CP.DNCP_PATIENTID = ADDR.V8_TPSPERSONID) 
    LEFT OUTER JOIN I_VPERSONPAT PAT 
     ON (CP.OFFICE_ID = PAT.OFFICE_ID AND CP.DNCP_PATIENTID = PAT.V51_PRSNPERSONID) 
    LEFT OUTER JOIN IACCOUNT ACC 
     ON (CP.OFFICE_ID = ACC.OFFICE_ID AND CP.DNCP_ACCOUNTSID = ACC.ACCACCOUNTSID) 
    LEFT OUTER JOIN IPAYMENT PMT 
     ON (CP.OFFICE_ID = PMT.OFFICE_ID AND CP.DNCP_PAYMENTSID = PMT.PMTPAYMENTSID) 
    LEFT OUTER JOIN I_VLUPROCCLASS CL 
     ON (PR.OFFICE_ID = CL.OFFICE_ID AND PR.PRCLASS = CL.V85_LUCLOOKUPCODE) 
    LEFT OUTER JOIN I_VSVCCNTRPROC SVC 
     ON (CP.OFFICE_ID = SVC.OFFICE_ID AND CP.DNCP_SERVICECENTERID = SVC.V75_SVCSERVICECENTERID) 
    LEFT OUTER JOIN I_DNDXPROCEVENT DX 
     ON (CP.OFFICE_ID = DX.OFFICE_ID AND CP.DNCP_PROCEDUREEVENTSID = DX.TPSPROCEDUREEVENTSID) 
    INNER JOIN (
     SELECT CP.DNCP_PATIENTID AS PSNNMBR, 
      MAX(CP.DNCP_FROMSERVICEDATE) AS SVCDT, 
      MAX(CP.DNCP_AMOUNT_CHARGE) AS CHGAMT 
     FROM I_DNCHGSPMTS CP 
      LEFT OUTER JOIN IPROCEDURE PR 
       ON (CP.DNCP_PROCEDURECODE = PR.PRPROCEDURECODE AND CP.OFFICE_ID = PR.OFFICE_ID) 
      LEFT OUTER JOIN I_VSTAFFCHGBILL STFBILL 
       ON (CP.OFFICE_ID = STFBILL.OFFICE_ID AND CP.DNCP_PRACTICEID = STFBILL.V69_STPRACTICEID AND 
       CP.DNCP_STAFFID_CREDITED = STFBILL.V69_STSTAFFID) 
      LEFT OUTER JOIN I_VPROVCHGBILL BILL 
       ON (STFBILL.V69_STSTAFFID = BILL.V58_PROVPROVIDERID AND STFBILL.OFFICE_ID = BILL.OFFICE_ID) 
      LEFT OUTER JOIN I_DNCHGCOVERAGE CHGCV 
       ON (CP.OFFICE_ID = CHGCV.OFFICE_ID AND CP.DNCP_CHARGESID = CHGCV.TPSCHARGESID) 
      LEFT OUTER JOIN I_VDNPLANCHGCV1 CV 
       ON (CHGCV.CHGCVR1PLANID = CV.V9_DNPLANID AND CHGCV.OFFICE_ID = CV.OFFICE_ID) 
      LEFT OUTER JOIN I_VDEPTCHG DEP 
       ON (CP.DNCP_DEPARTMENTCODE = DEP.V4_DPTDEPARTMENTCODE AND CP.OFFICE_ID = DEP.OFFICE_ID) 
      LEFT OUTER JOIN I_VDNADDRSPAT ADDR 
       ON (CP.OFFICE_ID = ADDR.OFFICE_ID AND CP.DNCP_PATIENTID = ADDR.V8_TPSPERSONID) 
      LEFT OUTER JOIN I_VPERSONPAT PAT 
       ON (CP.OFFICE_ID = PAT.OFFICE_ID AND CP.DNCP_PATIENTID = PAT.V51_PRSNPERSONID) 
      LEFT OUTER JOIN IACCOUNT ACC 
       ON (CP.OFFICE_ID = ACC.OFFICE_ID AND CP.DNCP_ACCOUNTSID = ACC.ACCACCOUNTSID) 
      LEFT OUTER JOIN IPAYMENT PMT 
       ON (CP.OFFICE_ID = PMT.OFFICE_ID AND CP.DNCP_PAYMENTSID = PMT.PMTPAYMENTSID) 
      LEFT OUTER JOIN I_VLUPROCCLASS CL 
       ON (PR.OFFICE_ID = CL.OFFICE_ID AND PR.PRCLASS = CL.V85_LUCLOOKUPCODE) 
      LEFT OUTER JOIN I_VSVCCNTRPROC SVC 
       ON (CP.OFFICE_ID = SVC.OFFICE_ID AND CP.DNCP_SERVICECENTERID = SVC.V75_SVCSERVICECENTERID) 
      LEFT OUTER JOIN I_DNDXPROCEVENT DX 
       ON (CP.OFFICE_ID = DX.OFFICE_ID AND CP.DNCP_PROCEDUREEVENTSID = DX.TPSPROCEDUREEVENTSID) 
     WHERE CP.OFFICE_ID = 'EDQV' 
      AND CP.DNCP_ACTIVITYTYPE = 'CHG' 
      --AND (CP.DNCP_PROCEDURECODE LIKE '99490' OR CP.DNCP_PROCEDURECODE LIKE 'CCM') 
      AND PAT.V51_PRSNSEX = 'F' 
      AND (DATEDIFF(DAY,PAT.V51_PRSNDOB,GETDATE())/365) >= 65 
      AND SUBSTRING(DEP.V4_DPTNAME,1,5) IN ('PRIMA','WOMEN','URGIC') 
      AND (DATEDIFF(DAY,CP.DNCP_POSTDATE,GETDATE())) < 720 
      --FOLLOWING PROVIDES NON DIABETICS 
      AND (DX.PROCEVENTDIAG1CODE NOT IN ('E11.65', 'E11.9', 'E10.9', 'E13.8', 'E10.39', 'E11.00', 'E11.69', 'E11.319', 'E11.42', 'E11.359', 'E11.329', 'E13.9', 'E10.8', 'E11.59', 'E11.39', 'H35.00') OR 
       DX.PROCEVENTDIAG2CODE NOT IN ('E11.65', 'E11.9', 'E10.9', 'E13.8', 'E10.39', 'E11.00', 'E11.69', 'E11.319', 'E11.42', 'E11.359', 'E11.329', 'E13.9', 'E10.8', 'E11.59', 'E11.39', 'H35.00') OR 
       DX.PROCEVENTDIAG3CODE NOT IN ('E11.65', 'E11.9', 'E10.9', 'E13.8', 'E10.39', 'E11.00', 'E11.69', 'E11.319', 'E11.42', 'E11.359', 'E11.329', 'E13.9', 'E10.8', 'E11.59', 'E11.39', 'H35.00') OR 
       DX.PROCEVENTDIAG4CODE NOT IN ('E11.65', 'E11.9', 'E10.9', 'E13.8', 'E10.39', 'E11.00', 'E11.69', 'E11.319', 'E11.42', 'E11.359', 'E11.329', 'E13.9', 'E10.8', 'E11.59', 'E11.39', 'H35.00')) 
     GROUP BY CP.DNCP_PATIENTID 
     ) AS MAXSVCDATE 
     ON (CP.DNCP_PATIENTID = MAXSVCDATE.PSNNMBR AND CP.DNCP_FROMSERVICEDATE = MAXSVCDATE.SVCDT AND CP.DNCP_AMOUNT_CHARGE = MAXSVCDATE.CHGAMT) 
WHERE CP.OFFICE_ID = 'EDQV' 
    AND PAT.V51_PRSNPERSONNUMBER NOT IN (
     SELECT PAT.V51_PRSNPERSONNUMBER 
     FROM I_DNCHGSPMTS CP 
      LEFT OUTER JOIN IPROCEDURE PR 
       ON (CP.DNCP_PROCEDURECODE = PR.PRPROCEDURECODE AND CP.OFFICE_ID = PR.OFFICE_ID) 
      LEFT OUTER JOIN I_VSTAFFCHGBILL STFBILL 
       ON (CP.OFFICE_ID = STFBILL.OFFICE_ID AND CP.DNCP_PRACTICEID = STFBILL.V69_STPRACTICEID AND 
       CP.DNCP_STAFFID_CREDITED = STFBILL.V69_STSTAFFID) 
      LEFT OUTER JOIN I_VPROVCHGBILL BILL 
       ON (STFBILL.V69_STSTAFFID = BILL.V58_PROVPROVIDERID AND STFBILL.OFFICE_ID = BILL.OFFICE_ID) 
      LEFT OUTER JOIN I_DNCHGCOVERAGE CHGCV 
       ON (CP.OFFICE_ID = CHGCV.OFFICE_ID AND CP.DNCP_CHARGESID = CHGCV.TPSCHARGESID) 
      LEFT OUTER JOIN I_VDNPLANCHGCV1 CV 
       ON (CHGCV.CHGCVR1PLANID = CV.V9_DNPLANID AND CHGCV.OFFICE_ID = CV.OFFICE_ID) 
      LEFT OUTER JOIN I_VDEPTCHG DEP 
       ON (CP.DNCP_DEPARTMENTCODE = DEP.V4_DPTDEPARTMENTCODE AND CP.OFFICE_ID = DEP.OFFICE_ID) 
      LEFT OUTER JOIN I_VDNADDRSPAT ADDR 
       ON (CP.OFFICE_ID = ADDR.OFFICE_ID AND CP.DNCP_PATIENTID = ADDR.V8_TPSPERSONID) 
      LEFT OUTER JOIN I_VPERSONPAT PAT 
       ON (CP.OFFICE_ID = PAT.OFFICE_ID AND CP.DNCP_PATIENTID = PAT.V51_PRSNPERSONID) 
      LEFT OUTER JOIN IACCOUNT ACC 
       ON (CP.OFFICE_ID = ACC.OFFICE_ID AND CP.DNCP_ACCOUNTSID = ACC.ACCACCOUNTSID) 
      LEFT OUTER JOIN IPAYMENT PMT 
       ON (CP.OFFICE_ID = PMT.OFFICE_ID AND CP.DNCP_PAYMENTSID = PMT.PMTPAYMENTSID) 
      LEFT OUTER JOIN I_VLUPROCCLASS CL 
       ON (PR.OFFICE_ID = CL.OFFICE_ID AND PR.PRCLASS = CL.V85_LUCLOOKUPCODE) 
      LEFT OUTER JOIN I_VSVCCNTRPROC SVC 
       ON (CP.OFFICE_ID = SVC.OFFICE_ID AND CP.DNCP_SERVICECENTERID = SVC.V75_SVCSERVICECENTERID) 
      LEFT OUTER JOIN I_DNDXPROCEVENT DX 
       ON (CP.OFFICE_ID = DX.OFFICE_ID AND CP.DNCP_PROCEDUREEVENTSID = DX.TPSPROCEDUREEVENTSID) 
     WHERE CP.OFFICE_ID = 'EDQV' 
      AND CP.DNCP_ACTIVITYTYPE = 'CHG' 
      AND BILL.V58_PROVSORTNAME LIKE '%LOCASCIO%' 
      AND (DATEDIFF(DAY,CP.DNCP_POSTDATE,GETDATE())) < 720 
     ) 

、それは素晴らしい実行されます。すべてを含めて、NOT INという文ではなくINの文に変更すると、うまく動作します。私は独立したクエリを実行し、手動でそれを行うためにExcelにそれらを引っ張ったので、私は戻ってくるべきレコードの数を知っている。

NOT INステートメントをすべて除外すると、3,315レコードが取得されます。 INステートメントを作成すると、283が得られます。これはExcelで正確で検証されています。したがって、NOT INステートメントに変更すると、3,032レコードを取得する必要があります。しかし、私はゼロになる!私はここで何か愚かな行方不明ですか?

このコードのポイントは、糖尿病ではなく、プライマリケア、女性のケア、または最後のケアで見られた65歳以上のすべての女性患者の連絡先リストを返すことです過去2年間にロカシオ博士にも見られていない2年間です。 1人につき1行だけ返す必要があります。

+2

おそらく@stackoverflow.com/q/5231712/73226 –

+0

@MartinSmith Geniusの複製!私はお詫びします...私は事前に検索することを約束しますが、その投稿には出くわしませんでした。どうもありがとうございました。問題が解決しました!私は新しいことを学びました!ハハ – RSQ2

答えて

0

これは、PAT.V51_PRSNPERSONNUMBERがNULLである可能性があります。ほとんどの場合、NOT INの左側にありますが、おそらくはsubselectにもあります。述語では、NULL = NULLという表現はUNKNOWNという値を持ちます(TRUEまたはFALSEとは対照的です)。これは、結果から行を除外する効果があります。 (NULL!= NULL)もUNKNOWN値を持つため、同じ行はいずれの方法でも除外されます。 NOT IN述部についても同様です。上記の列がNULLの場合、副選択でINまたはNOT IN演算子で戻されたNULL値と一致しません。

なぜPAT.V51_PRSNPERSONNUMBERがnullであるのかについては、PATエイリアス化されたIVERSIONPATビューまたはテーブルのPATエイリアスインスタンスに参加するために使用される結合条件になっている可能性があります(これは通常、直感的ではありません)一致しない - 左の結合では、すべてのPAT列がNULLになります。最初のステップは、subselectを単独で実行して、上記の列が実際に一部の行に対してNULLを戻しているかどうかを確認することです。

関連する問題