如何获取超过100 000个事务和多个事务的Originator_Account_Id。没有使用条款?

时间:2013-01-09 11:41:02

标签: sql-server

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

我希望Originator_ID仅用于100 000以上的交易,而不使用having子句的交易超过1个。

2 个答案:

答案 0 :(得分: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 with demo

如果他们的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

答案 1 :(得分: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