2016-05-10 3 views
0

Прежде всего, прошу прощения за огромный блок кода. Это в основном таблица, содержащая 4 оператора select (каждый с другим [Lag_Error]), затем объединяет их все вместе для создания отчета об ошибке.Необходима помощь с сообщением об ошибке

Мой босс на моем внесении изменений в этот код. Мне нужен этот отчет об ошибке, чтобы зафиксировать if (a.region = 'CR' и a.eff_date = '4/1/2016'), [Lag Error] должен отображать «Lag должен быть 1» (как из первого оператора select) , Я смог выполнить это, используя инструкцию обновления в конце, но она сказала, что мне нужно вернуться через код и внести изменения в каждый оператор select, чтобы сделать это.

Таким образом, для любой записи, имеющей (область CR и eff_date> = 4/1/2016) кнопки [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] = 'Lag должно быть 1' –

+0

Не уверен, что я прав, но почему бы не ' SELECT .. CASE WHEN region = 'CR' и eff_date> = '4/1/2016' THEN 'Lag должен быть 1' ELSE ... END AS [Lag Error] '? – Serg

ответ

1

Я рекомендую вам поговорить с вашим боссом и адвокат настоятельно рефакторинга, рефакторинга это, однако, кажется, что она не может быть восприимчивы к идее.

Если вы должны изменить все выбирают, а затем изменить WHERE в первом заявлении (лаг должна быть 1), чтобы проверить новое требование или всех других требований. Это будет заботиться о любой строки, где 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 
Смежные вопросы