Избегайте повторяющихся строк, когда один столбец не уникален - PullRequest
0 голосов
/ 24 июня 2018

Я создаю запрос, который использует в общей сложности около 20 столбцов.У меня есть много записей, которые являются дубликатами, потому что один столбец отличается.Этот столбец является своего рода флагом и может содержать только «Y» или «N».Моя проблема в том, что если флаг «Y», то для той же заявки есть также дополнительная строка с флагом «N».Как я могу показать только строки с «Y».Примечание: у некоторых результатов будет только правильное «N», поэтому я не могу использовать flag = «Y» в предложении where.

Запрос:

if object_id('tempdb.dbo.#HeaderCount') is not null drop table #HeaderCount
Select Distinct 
[MCO Claim ID (ICN)] = c.claimid
,[Header Claim Acceptance Status] = Case When c.reject = 'Y' Then 'X' Else 'A' End
,[Header Claim Source Status] = Case When c.ClaimID not like '%A%' or c.claimid not like '%R%'                                                                           Then 'OR'
                                 When c.claimID like '%A%' Then 'AJ'
                                 When c.claimID like '%R%' Then 'RV' End
,[Header Claim Ever Pended] = Case When ca.Orig_Status = 'PEND' Then 'Y' Else 'N' End 
,[Header Claim Adjudication Payment Status] =  c.Status
,[Member Medicaid ID] = ek.carriermemid
,[LDH Billing Provider ID] = '' --Optional
,[Billing Provider NPI] = p2.NPI
,[Servicing Provider NPI] = p.NPI
,[Header From Date of Service] = cast(c.StartDate as date)
,[Header To Date of Service] = cast(c.EndDate as date)
,[Date Claim Received by the MCO] = cast(c.CleanDate as date)
,[Date Claim Adjudicated by the MCO] = cast(c.adjuddate as date)
,[Date Claim Paid by the MCO] = cast(c.paiddate as date)
,[Billed Charges] = c.totalamt
,[MCO Paid Amount] = c.totalpaid
,c.formtype
,[BillType] = c.FacilityCode + c.BillClassCode
,c.reject
,c.status
into #HeaderCount
from PlanReport_QNXT_LA.dbo.claim c (NOLOCK)
left join PlanReport_QNXT_LA.dbo.affiliation a2     (NOLOCK)--pay to affiliation
on a2.affiliationid = c.affiliationid
left join PlanReport_QNXT_LA.dbo.provider p2    (NOLOCK)    --pay to provider
on a2.affiliateid = p2.provid
inner join PlanReport_QNXT_LA.dbo.provider p    (NOLOCK)    --rendering provider
on p.provid = c.provid
inner join PlanReport_QNXT_LA.dbo.claim_audit ca    (NOLOCK)
on c.claimid = ca.claimid
inner join PlanReport_QNXT_LA.dbo.member m      (NOLOCK)
on c.memid = m.memid
inner join PlanReport_QNXT_LA.dbo.enrollkeys ek     (NOLOCK)
on m.memid = ek.memid
and ek.segtype = 'int'
Where c.cleandate between '1/1/2017' and '1/31/2017'
Order By c.claimid

Iхочу видеть только одну строку (строку 'Y') для каждого [ИД заявки MCO (ICN)], в котором есть столбцы «Y» и «N» в столбце [Заявка на заголовок когда-либо отложена].Я думаю, что разделение по номеру строки может быть решением?

Пожалуйста, дайте мне знать, если мне нужно предоставить больше информации или это не имеет смысла.Я работаю над предоставлением образцов данных, как только устраню проблему с VPN, с которой столкнулся.Заранее спасибо.

Вот некоторые примеры данных:

[Идентификатор заявки MCO (ICN)] [Заявка на заголовок когда-либо отложена]

1 15059C063424A1 Y

2 15059C063424A1 N

3 15218C098293A2 N

В приведенном выше примере предположим, что все значения в каждом столбце (не показаны) одинаковы для строк 1 и 2, за исключением столбца [Заявка на заголовок когда-либо отложена],Я хочу видеть запись «Y», если таковая существует, для каждой заявки (не для записи Y и N).Кроме того, если [MCO Claim ID (ICN)] не имеет записи «Y», я хочу просмотреть запись «N».

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Это сделал трюк ...

Select ROW_NUMBER() over(PARTITION BY [MCO Claim ID (ICN)] ORDER BY 
[Header Claim Ever Pended] Desc) Row#
Into #temptable
From #HeaderCount

Select *
From #temptable
Where Row# = 1
0 голосов
/ 24 июня 2018

Добавить ROW_NUMBER:

with cte as
 ( -- DISTINCT is calulated after ROW_NUMBER
    Select Distinct 
    [MCO Claim ID (ICN)] = c.claimid
    ,[Header Claim Acceptance Status] = Case When c.reject = 'Y' Then 'X' Else 'A' End
    ,[Header Claim Source Status] = Case When c.ClaimID not like '%A%' or c.claimid not like '%R%'                                                                           Then 'OR'
                                     When c.claimID like '%A%' Then 'AJ'
                                     When c.claimID like '%R%' Then 'RV' End
    ,[Header Claim Ever Pended] = Case When ca.Orig_Status = 'PEND' Then 'Y' Else 'N' End 
    ,[Header Claim Adjudication Payment Status] =  c.Status
    ,[Member Medicaid ID] = ek.carriermemid
    ,[LDH Billing Provider ID] = '' --Optional
    ,[Billing Provider NPI] = p2.NPI
    ,[Servicing Provider NPI] = p.NPI
    ,[Header From Date of Service] = cast(c.StartDate as date)
    ,[Header To Date of Service] = cast(c.EndDate as date)
    ,[Date Claim Received by the MCO] = cast(c.CleanDate as date)
    ,[Date Claim Adjudicated by the MCO] = cast(c.adjuddate as date)
    ,[Date Claim Paid by the MCO] = cast(c.paiddate as date)
    ,[Billed Charges] = c.totalamt
    ,[MCO Paid Amount] = c.totalpaid
    ,c.formtype
    ,[BillType] = c.FacilityCode + c.BillClassCode
    ,c.reject
    ,c.status
    from PlanReport_QNXT_LA.dbo.claim c (NOLOCK)
    left join PlanReport_QNXT_LA.dbo.affiliation a2     (NOLOCK)--pay to affiliation
    on a2.affiliationid = c.affiliationid
    left join PlanReport_QNXT_LA.dbo.provider p2    (NOLOCK)    --pay to provider
    on a2.affiliateid = p2.provid
    inner join PlanReport_QNXT_LA.dbo.provider p    (NOLOCK)    --rendering provider
    on p.provid = c.provid
    inner join PlanReport_QNXT_LA.dbo.claim_audit ca    (NOLOCK)
    on c.claimid = ca.claimid
    inner join PlanReport_QNXT_LA.dbo.member m      (NOLOCK)
    on c.memid = m.memid
    inner join PlanReport_QNXT_LA.dbo.enrollkeys ek     (NOLOCK)
    on m.memid = ek.memid
    and ek.segtype = 'int'
    Where c.cleandate between '1/1/2017' and '1/31/2017'
 ),
cte_with_rn as
 ( -- now apply the ROW_NUMBER
   select *,
      row_number()
      over (partition by  [MCO Claim ID (ICN)]
            order by [Header Claim Ever Pended] desc) as rn -- 'Y' sorts before 'N'
   from cte
 )
select *   -- change to all colujmns except rn
into #HeaderCount
from cte_with_rn 
where rn = 1
Order By claimid
...