2016-05-10 35 views
0

首先,我爲大塊代碼表示歉意。這基本上是一個包含4個select語句的表(每個語句都有一個不同的[Lag_Error]),然後將它們聯合起來創建一個錯誤報告。提供所需的錯誤報告幫助

我的老闆正在對我這個(她)的代碼進行更改。我需要這個錯誤報告來捕捉[a.region ='CR'和a.eff_date ='4/1/2016')[Lag Error]應該顯示'滯後應該是1'(就像從第一個選擇語句) 。我能夠通過在最後使用更新語句來實現這一點,但她表示我需要回頭查看代碼並對每條select語句進行更改以完成此操作。

因此,對於具有(區域CR和eff_date> = 2016年4月1日)的[Lag_Error]應該讀「滯後,應爲1」

可以在任何幫助我的任何記錄?我試圖刪除所有註釋,以便適應所有情況並避免在代碼中使用羣集,因爲註釋在跟蹤代碼時沒有幫助。這可能會導致語法錯誤。爲此,我表示歉意。

CREATE TABLE [usr].[#AFF_LAG] 
(
[OP_NO]   [varchar] NULL, 
[PROV_NO]  [varchar] (12) NOT NULL, 
    [AFF_NO]  [varchar] (16) NOT NULL, 
    [EFF_DATE]  [datetime] NULL, 
    [END_DATE]  [datetime] NULL, 
    [LAG]   [int] NULL, 
    [Lag_Error]  [varchar] (50) NULL, 
    [STATUS]  [varchar] (2) NULL, 
    [Prov_Name]  [varchar] (60) NULL, 
    [REGION]  [varchar] (2) NULL, 
    [SPEC_1]  [varchar] (2) NULL, 
    [DESCRIPTION] [char] (72) NULL, 
    [IRS_NO]  [varchar] (10) NULL) 
    ON [PRIMARY] 

    SELECT DISTINCT a.OP_NO, 
       a.PROV_NO, 
       a.AFF_NO, 
       a.eff_date, 
       a.end_Date, 
       a.lag, 
       'Lag should be 1' AS Lag_Error, 
       a.status, 
       b.First_Name + ' ' + b.Last_Name AS [Prov_Name], 
       Region, 
       a.Spec_1, 
       [description], 
       a.IRS_NO 
INTO #templag2 
FROM amisys.dbo.affiliation a 
     INNER JOIN amisys.dbo.provider b ON a.prov_no = b.prov_no 
     LEFT OUTER JOIN amisys.dbo.code_detail cd 
     ON a.spec_1 = cd.code_no AND prefix = 'sp' 
WHERE  a.end_date = '12/31/9999' 
     AND a.void = ' ' 
     AND a.lag <> 1 
     AND b.prov_no <> '1000001395' 
     AND ( (a.spec_1 = 'ca' AND region = 'ni') 
      OR (a.spec_1 = 'FN' AND region = 'S1') 
      OR (a.spec_1 = 'FN' AND region = 'SD') 
      OR (a.spec_1 = 'FN' AND region = 'WC') 
      OR (a.spec_1 = 'FN' AND region = 'WJ') 
      OR  a.prov_no = '100064886' 
      OR ( a.prov_no IN ('100070539', '721313430ST1') 
       AND a.region = 'SI') 
      OR ( a.prov_no IN ('100070539', '721313430ST1') 
       AND a.region = 'wj') 
      OR ( a.prov_no IN ('100070539', '721313430ST1') 
       AND a.region IN ('GC','WC')) 
      OR a.irs_no = '274630894' 
      OR a.irs_no = '010940346' 
      OR ( a.prov_no IN ('1000009816', 
           '1000011878', 
           '436211363SC1', 
           '720204265TE1', 
           '720914714PE1', 
           '720975722CE1') 
       AND a.region = 'pn') 
      OR a.irs_no = '452829073' 
      OR  a.prov_no IN ('0001', 
           '0002', 
           '0003', 
           '0004', 
           '0005', 
           '0006', 
           '0007', 
           '0008', 
           '0009', 
           '0010', 
           '0011') 
       AND NOT a.prov_no = '100067743') 

SELECT DISTINCT a.OP_NO, 
       a.PROV_NO, 
       a.AFF_NO, 
       a.eff_date, 
       a.end_Date, 
       a.lag, 
       'Lag should be 30' AS Lag_Error, 
       a.status, 
       b.First_Name + ' ' + b.Last_Name AS [Prov_Name], 
       Region, 
       a.Spec_1, 
       [description], 
       a.IRS_NO 
INTO #templag3 
FROM amisys.dbo.affiliation a 
     INNER JOIN amisys.dbo.provider b ON a.prov_no = b.prov_no 
     LEFT OUTER JOIN amisys.dbo.code_detail cd 
     ON a.spec_1 = cd.code_no AND prefix = 'sp' 
WHERE  a.end_date = '12/31/9999' 
     AND a.void = ' ' 
     AND b.prov_no <> '1000001395' 
     AND a.lag <> 30 
     AND NOT ( (a.spec_1 = 'ca' AND region = 'ni') 
       OR (a.spec_1 = 'ca' AND region = 'ui') 
       OR (a.spec_1 = 'ca' AND region = 'CI') 
       OR (a.spec_1 = 'ca' AND region = 'SI') 
       OR (a.spec_1 = 'ca' AND region = 'wj') 
       OR (a.spec_1 = 'CA' AND region = 'GC') 
       OR (a.spec_1 = 'CA' AND region = 'WC') 
       OR (a.spec_1 = 'OB' AND region = 'WJ')) 
     and not a.prov_no = '100064886' 
     AND NOT ( a.prov_no IN ('100070539', '721313430ST1') 
       AND a.region = 'SI') 
     AND NOT ( a.prov_no IN ('100070539', '721313430ST1') 
       AND a.region = 'wj') 
     AND NOT ( a.prov_no IN ('100070539', '721313430ST1') 
       AND a.region IN ('GC','WC')) 
     AND NOT a.prov_no = '720478620ST1' 
     AND NOT a.irs_no IN ('201729674', 
          '205432631', 
          '205432782', 
          '271770321', 
          '720276883', 
          '720502505', 
          '721473968', 
          '204670876') 
     AND NOT ( a.prov_no IN ('1000009816', 
           '1000011878', 
           '436211363SC1', 
           '720204265TE1', 
           '720914714PE1', 
           '720975722CE1') 
       AND a.region = 'pn') 
     AND NOT a.irs_no = '452829073' 
     AND NOT a.prov_no IN ('0001', 
          '0002', 
          '0003', 
          '0004', 
          '0005', 
          '0006', 
          '0007', 
          '0008', 
          '0009', 
          '0010', 
          '0011') 
     AND NOT a.prov_no = '100067743' 



SELECT DISTINCT a.OP_NO, 
       a.PROV_NO, 
       a.AFF_NO, 
       a.eff_date, 
       a.end_Date, 
       a.lag, 
       'Lag should be 25' AS Lag_Error, 
       a.status, 
       b.First_Name + ' ' + b.Last_Name AS [Prov_Name], 
       Region, 
       a.Spec_1, 
       [description], 
       a.IRS_NO 
INTO #templag4 
FROM amisys.dbo.affiliation a 
     INNER JOIN amisys.dbo.provider b ON a.prov_no = b.prov_no 
     LEFT OUTER JOIN amisys.dbo.code_detail cd 
     ON a.spec_1 = cd.code_no AND prefix = 'sp' 
WHERE  a.end_date = '12/31/9999' 
     AND a.void = ' ' 
     AND a.lag <> 25 
     AND a.prov_no = '720478620ST1' 
     AND NOT a.prov_no = '100067743' 

SELECT DISTINCT a.OP_NO, 
       a.PROV_NO, 
       a.AFF_NO, 
       a.eff_date, 
       a.end_Date, 
       a.lag, 
       'Lag should be 21' AS Lag_Error, 
       a.status, 
       b.First_Name + ' ' + b.Last_Name AS [Prov_Name], 
       Region, 
       a.Spec_1, 
       [description], 
       a.IRS_NO 
INTO #templag5 
FROM amisys.dbo.affiliation a 
     INNER JOIN amisys.dbo.provider b ON a.prov_no = b.prov_no 
     LEFT OUTER JOIN amisys.dbo.code_detail cd 
     ON a.spec_1 = cd.code_no AND prefix = 'sp' 
WHERE  a.end_date = '12/31/9999' 
     AND a.void = ' ' 
     AND b.prov_no <> '1000001395' 
     AND a.lag <> '21' 
     AND ( a.irs_no IN ('201729674', 
          '205432631', 
          '205432782', 
          '271770321', 
          '720276883', 
          '720502505', 
          '721473968', 
          '204670876') 
      OR b.prov_no = '0012') 
     AND NOT ( (a.spec_1 = 'ca' AND region = 'ni') 
       OR (a.spec_1 = 'ca' AND region = 'ui') 
       OR (a.spec_1 = 'ca' AND region = 'CI') 
       OR (a.spec_1 = 'FN' AND region = 'WJ')) 
    and not a.prov_no = '100064886' 
     AND NOT ( a.prov_no IN ('100070539', '721313430ST1') 
       AND a.region = 'SI') 
     AND NOT ( a.prov_no IN ('100070539', '721313430ST1') 
       AND a.region = 'WJ') 
     AND NOT ( a.prov_no IN ('100070539', '721313430ST1') 
       AND a.region IN ('GC','WC')) 
     AND NOT a.prov_no = '720478620ST1' 
     AND NOT a.irs_no = '274630894' 
     AND NOT a.irs_no = '010940346' 
     AND NOT ( a.prov_no IN ('1000009816', 
           '1000011878', 
           '436211363SC1', 
           '720204265TE1', 
           '720914714PE1', 
           '720975722CE1') 
       AND a.region = 'pn') 
     AND NOT a.irs_no = '452829073' 
     AND NOT a.prov_no IN ('0001', 
          '0002', 
          '0003', 
          '0004', 
          '0005', 
          '0006', 
          '0007', 
          '0008', 
          '0009', 
          '0010', 
          '0011') 
     AND NOT a.prov_no = '100067743' 


INSERT INTO #AFF_LAG 
    SELECT * FROM #templag2 
    UNION 
    SELECT * FROM #templag3 
    UNION 
    SELECT * FROM #templag4 
    UNION 
    SELECT * FROM #templag5 



SELECT service_No, 
     CLAIM_NO, 
     Member_No, 
     P.Aff_No AS SVC_AFF_NO, 
     p.paid, 
     Amt_Charge, 
     Amt_Allow_P, 
     Amt_Copay, 
     Amt_Coin, 
     Amt_Risk, 
     Amt_pay, 
     Count_1, 
     Ex_1, 
     Location, 
     Procedure_1, 
     Modifier_1, 
     P.Eff_Date AS CLM_EFF_DATE, 
     Paid_Date, 
     A.[OP_NO], 
     A.[PROV_NO], 
     A.[AFF_NO], 
     A.[eff_DATE], 
     A.[END_DATE], 
     A.[LAG], 
     A.[Lag_Error], 
     A.[STATUS], 
     A.[Prov_Name], 
     A.[REGION], 
     A.[SPEC_1], 
     A.[DESCRIPTION], 
     A.[IRS_NO] 
FROM #aff_lag AS A 
     LEFT OUTER JOIN AMISYS.dbo.service AS P 
     ON A.AFF_NO = P.AFF_NO AND p.paid IN ('NN', '*N') 
GROUP BY service_No, 
     CLAIM_NO, 
     Member_No, 
     P.Aff_No, 
     P.Paid, 
     Amt_Charge, 
     Amt_Allow_P, 
     Amt_Copay, 
     Amt_Coin, 
     Amt_Risk, 
     Amt_pay, 
     Count_1, 
     Ex_1, 
     Location, 
     Procedure_1, 
     Modifier_1, 
     P.Eff_Date, 
     Paid_Date, 
     A.[OP_NO], 
     A.[PROV_NO], 
     A.[AFF_NO], 
     A.[eff_DATE], 
     A.[END_DATE], 
     A.[LAG], 
     A.[Lag_Error], 
     A.[STATUS], 
     A.[Prov_Name], 
     A.[REGION], 
     A.[SPEC_1], 
     A.[DESCRIPTION], 
     A.[IRS_NO] 

DROP TABLE #AFF_LAG 
DROP TABLE #templag2 
DROP TABLE #templag3 
DROP TABLE #templag4 
DROP TABLE #templag5 
+0

不解決你的問題,但這是一個'OR'噩夢...你有沒有考慮創建一個臨時表到JOIN而不是一英里長的OR列表? – Siyual

+0

'OR'大部分可以忽略。目的是添加邏輯'(region ='CR'和EFF_DATE> ='4/1/2016')'應該是[Lag_Error] ='滯後應該是1' –

+0

不確定我是否正確,但爲什麼不' SELECT .. CASE WHEN region ='CR'and eff_date> ='4/1/2016'THEN'lag should be 1'ELSE ... END AS [Lag Error]'? – Serg

回答

1

我建議你和你的老闆談談,並且強烈地提倡重構這個,但是,這聽起來像她可能不接受這個想法。

如果您必須更改所有選擇,則在第一條語句(滯後應爲1)中更改WHERE以檢查新要求的所有其他要求。這會照顧任何排在那裏region = 'CR' and eff_date >= 4/1/2016

WHERE (region = 'CR' and eff_date >= '4/1/2016') 
     OR 
     (
     ... --Rest of where clause goes here 
    ) 

更改其他選擇忽略適應新的要求行,因爲第一個語句將已返回他們都:

WHERE NOT(region = 'CR' and eff_date >= '4/1/2016') 
     AND ... --Rest of where clause goes here