0

に基づいて、重複したすべてのレコードを取得しようとしています:

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'.

複数回発生した場合にのみレコードを返すにはどうすればよいですか?

4

5 に答える 5

2

句でエイリアスを使用する場合は、別のステートメント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
于 2012-08-08T23:38:26.173 に答える
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
            ) 
于 2012-08-09T06:48:49.293 に答える
1

これを試して:

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
于 2012-08-09T06:27:17.213 に答える
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 の後のレコードをフィルタリングします。

于 2012-08-09T00:16:06.657 に答える
1

あなたのテーブルがどのようにインデックス化されているかわかりませんが、自己左結合はどうですか? テストする価値はあるかもしれませんが、上記の方法のいずれよりも速いとは思えません。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
于 2012-08-09T05:27:15.720 に答える