использование CTE при объявлении переменных в SQL - PullRequest
0 голосов
/ 05 ноября 2019

У меня две отклоненные переменные, и я пытаюсь установить значения из результата моего CTE,

 declare @Total_new_claims_received int
 declare @Total_Claims_Processed int

Конечное решение, которое я ищу, - это возможность установить оба объявленных значения из результатов CTE:

select @Total_new_claims_received = count(id) 
from cte 
where benefit_code_id not in ('739')



select @Total_Claims_Processed = count(id)
from cte2
where benefit_code_id  not in ('739')

Текущий код:

 declare @Total_new_claims_received int
 declare @Total_Claims_Processed int

 with cte (ID, Date)
   as (

   select c.id, c.date
from axiscore.dbo.claim c with (nolock)
    inner join claim_line cl on c.Claim_ID = cl.Claim_ID and cl.Linenum = 1
    left join axiscore.dbo.member_policy mp with (nolock) on c.Member_Policy_ID = mp.Member_Policy_ID
    left join axiscore.dbo.policy p with (nolock) on mp.policy_id = p.policy_id
    inner join axiscore.dbo.Claim_Status s with (nolock) on c.Claim_Status_ID = s.Claim_Status_ID
    left outer join axiscore.dbo.Claim_Reason_Type r with (nolock) on c.Claim_Reason_Type_ID = r.Claim_Reason_Type_ID
where 
c.Updated_Date between '10-1-2019' and '10-31-2019'
and p.Payor_ID = 8
and (c.Claim_Status_ID <> 8)),



   cte2 (ID, Date)
   as 
   (
   select c.id, c.date
from axiscore.dbo.claim c with (nolock)
    inner join claim_line cl on c.Claim_ID = cl.Claim_ID and cl.Linenum = 1
    left join axiscore.dbo.member_policy mp with (nolock) on c.Member_Policy_ID = mp.Member_Policy_ID
    left join axiscore.dbo.policy p with (nolock) on mp.policy_id = p.policy_id
    inner join axiscore.dbo.Claim_Status s with (nolock) on c.Claim_Status_ID = s.Claim_Status_ID
    left outer join axiscore.dbo.Claim_Reason_Type r with (nolock) on c.Claim_Reason_Type_ID = r.Claim_Reason_Type_ID
where 
c.Updated_Date between '10-1-2019' and '10-31-2019'
and p.Payor_ID = 8
and (c.Claim_Status_ID in (7,6))                                                
and (c.Claim_Reason_Type_ID not in (136,137))) 




select @Total_new_claims_received = count(id)
from cte
where benefit_code_id  not in ('739')



select @Total_Claims_Processed = count(id)
from cte2
where benefit_code_id  not in ('739')

В настоящее время

это только установка значения для Total_new_claims_received. Он выдает ошибку при втором выборе, когда я устанавливаю значение для Total_Claims_Processed. Ошибка «недопустимое имя объекта» cte2.

Я использую CTE вместо временных таблиц, потому что я вызываю этот процесс в пакете служб SSIS. Пакет служб SSIS плохо работает с временными таблицами. Любые другие идеи приветствуются.

спасибо за ваше время!

1 Ответ

0 голосов
/ 05 ноября 2019

С WITH common_table_expression (Transact-SQL) :

За CTE должен следовать единственный оператор SELECT, INSERT, UPDATE или DELETEкоторый ссылается на некоторые или все столбцы CTE

Итак, определите каждый из ваших CTE перед каждым оператором выбора, который его использует:

 declare @Total_new_claims_received int
 declare @Total_Claims_Processed int

with cte (ID, Date) as (
    select c.id, c.date
    from axiscore.dbo.claim c with (nolock)
    inner join claim_line cl on c.Claim_ID = cl.Claim_ID and cl.Linenum = 1
    left join axiscore.dbo.member_policy mp with (nolock) on c.Member_Policy_ID = mp.Member_Policy_ID
    left join axiscore.dbo.policy p with (nolock) on mp.policy_id = p.policy_id
    inner join axiscore.dbo.Claim_Status s with (nolock) on c.Claim_Status_ID = s.Claim_Status_ID
    left outer join axiscore.dbo.Claim_Reason_Type r with (nolock) on c.Claim_Reason_Type_ID = r.Claim_Reason_Type_ID
    where 
      c.Updated_Date between '10-1-2019' and '10-31-2019'
      and p.Payor_ID = 8
      and (c.Claim_Status_ID <> 8)
    )
select @Total_new_claims_received = count(id)
from cte
where benefit_code_id  not in ('739');

with cte2 (ID, Date) as (
    select c.id, c.date
    from axiscore.dbo.claim c with (nolock)
    inner join claim_line cl on c.Claim_ID = cl.Claim_ID and cl.Linenum = 1
    left join axiscore.dbo.member_policy mp with (nolock) on c.Member_Policy_ID = mp.Member_Policy_ID
    left join axiscore.dbo.policy p with (nolock) on mp.policy_id = p.policy_id
    inner join axiscore.dbo.Claim_Status s with (nolock) on c.Claim_Status_ID = s.Claim_Status_ID
    left outer join axiscore.dbo.Claim_Reason_Type r with (nolock) on c.Claim_Reason_Type_ID = r.Claim_Reason_Type_ID
    where 
      c.Updated_Date between '10-1-2019' and '10-31-2019'
      and p.Payor_ID = 8
      and (c.Claim_Status_ID in (7,6))                                                
      and (c.Claim_Reason_Type_ID not in (136,137))
) 
select @Total_Claims_Processed = count(id)
from cte2
where benefit_code_id  not in ('739');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...