0
Originator_Acc_ID     |      Transaction_Amount  
-----------------------------------------------
001                   |           10000000 
001                   |           20000000
003                   |               1000 
002                   |           60000000

100 000 を超えるトランザクションと、having 句を使用しない複数のトランザクションの Originator_ID が必要です。

4

2 に答える 2

0

おそらくもっと良い方法がありますが、これはうまくいくようです。

;WITH MyTable AS
(
    SELECT   Originator_Acc_ID  = '001'
            ,Transaction_Amount =  10000000
    UNION ALL
    SELECT '001', 20000000
    UNION ALL
    SELECT '003', 1000
    UNION ALL
    SELECT '002', 60000000
)
,CTE AS
(
    SELECT   Originator_Acc_ID
            ,Transaction_Amount
            ,TxnPerOrig = COUNT(*) OVER (PARTITION BY Originator_Acc_ID)

    FROM MyTable
)
SELECT DISTINCT Originator_Acc_ID
FROM CTE
WHERE Transaction_Amount > 100000
AND TxnPerOrig > 1
于 2013-01-09T12:04:38.923 に答える
0

Originator_Acc_ID複数のトランザクションについてのみ知りたい場合は、 row_number を使用できます。

select Originator_Acc_ID, Transaction_Amount
from
(
  select Originator_Acc_ID, Transaction_Amount,
    row_number() over(partition by Originator_Acc_ID order by Originator_Acc_ID) rn
  from yourtable
  --where Transaction_Amount > 100000
) src
where rn > 1

デモで SQL Fiddle を参照してください

row_number()1 より大きい場合は、複数のトランザクションがあることを意味します。上記は、複数あるものすべてを返します。複数のトランザクションを持つアカウントのリストのみが必要な場合は、次を使用できます。

select distinct Originator_Acc_ID
from
(
  select Originator_Acc_ID, Transaction_Amount,
    row_number() over(partition by Originator_Acc_ID order by Originator_Acc_ID) rn
  from yourtable
  --where Transaction_Amount > 100000
) src
where rn > 1

あるいは:

select Originator_Acc_ID
from
(
  select Originator_Acc_ID, Transaction_Amount,
    row_number() over(partition by Originator_Acc_ID order by Originator_Acc_ID) rn
  from yourtable
  --where Transaction_Amount > 100000
) src
where rn = 2
于 2013-01-09T12:00:19.153 に答える