簡體   English   中英

返回重復的值

[英]returning values which are duplicated

我正在嘗試基於獲取所有重復的記錄:

accession_id, 
  check_num,
  procedure_code,
  paid_amt,

此查詢將返回上述內容以及重復這些字段的次數。

但是,我只想返回出現多次的那些。

  select    
  ACCESSION_PAYMENTS_DAILY_KEY, 
  accession_id, 
  check_num,
  procedure_code,
  paid_amt,
  row_number() 
  over 
  (partition by   accession_id, check_num,procedure_code,paid_amt order by ACCESSION_PAYMENTS_DAILY_KEY) as occurrence
          from      [MILLENNIUM_DW_DEV].[dbo].[F_PAYOR_PAYMENTS_DAILY]         
   where PROCEDURE_CODE is not null
   and PAID_AMT>0

當我在上面的查詢中添加過濾條件occurrence>1時,出現此錯誤:

Msg 207, Level 16, State 1, Line 13
Invalid column name 'occurrence'.

如果記錄不止一次出現,我如何才能返回記錄?

如果要在WHERE子句中使用別名,則可以將其包裝在另一個SELECT語句中。

SELECT *
FROM
(
  select ACCESSION_PAYMENTS_DAILY_KEY, 
    accession_id, 
    check_num,
    procedure_code,
    paid_amt,
    row_number() over (partition by   accession_id, check_num,procedure_code,paid_amt order by ACCESSION_PAYMENTS_DAILY_KEY) as occurrence
  from      [MILLENNIUM_DW_DEV].[dbo].[F_PAYOR_PAYMENTS_DAILY]         
  where PROCEDURE_CODE is not null
     and PAID_AMT>0
) x
WHERE x.occurrence>1

也許您應該嘗試使用GROUP BY / HAVING子句:

SELECT accession_id, check_num, procedure_code, paid_amt,
       COUNT(ACCESSION_PAYMENTS_DAILY_KEY) as occurrences 
FROM [MILLENNIUM_DW_DEV].[dbo].[F_PAYOR_PAYMENTS_DAILY] 
GROUP BY accession_id, check_num, procedure_code,paid_amt 
HAVING COUNT(ACCESSION_PAYMENTS_DAILY_KEY) > 1

HAVING子句過濾GROUP BY之后的記錄

知道您的表如何建立索引,但是自左聯接呢? 可能值得測試,但是我無法想象它比以上任何一種方法都要快。 除非為accession_id和check_num編制了索引,否則我什至不會嘗試...

Select
  t1.*
from [MILLENNIUM_DW_DEV].[dbo].[F_PAYOR_PAYMENTS_DAILY] as t1
left join [MILLENNIUM_DW_DEV].[dbo].[F_PAYOR_PAYMENTS_DAILY] as t2
  on t2.accession_id = t1.accession_id
  and t2.check_num = t1.check_num
  and t2.procedure_code = t1.procedure_code
  and t2.paid_amt = t1.paid_amt
where t2.ACCESSION_PAYMENTS_DAILY_KEY is null

嘗試這個:

select accession_id, 
    check_num,
    procedure_code,
    paid_amt,
    COUNT(*) as occurrance
  from      [MILLENNIUM_DW_DEV].[dbo].[F_PAYOR_PAYMENTS_DAILY]         
  where PROCEDURE_CODE is not null
     and PAID_AMT>0
     group by  accession_id,check_num,procedure_code,paid_amt
     having COUNT(*) > 1

也許替代...

;WITH MoreOne_CTE()
    AS
    (
    SELECT       
        ACCESSION_PAYMENTS_DAILY_KEY   
    FROM  [MILLENNIUM_DW_DEV].[dbo].[F_PAYOR_PAYMENTS_DAILY]     
    GROUP BY 
          accession_id,    
          check_num,   
          procedure_code,   
          paid_amt
    HAVING  COUNT(*) > 1     
    )
SELECT       
        ACCESSION_PAYMENTS_DAILY_KEY ,    
        accession_id,    
        check_num,   
        procedure_code,   
        paid_amt           
FROM [MILLENNIUM_DW_DEV].[dbo].[F_PAYOR_PAYMENTS_DAILY]   x  
WHERE
        PROCEDURE_CODE IS NOT NULL
        AND PAID_AMT>0 
        AND EXISTS 
            (
                    SELECT 1 
                    FROM MoreOne_CTE y 
                    WHERE x.ACCESSION_PAYMENTS_DAILY_KEY = y.ACCESSION_PAYMENTS_DAILY_KEY
            ) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM