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

我想要 Originator_ID 仅用于 100 000 以上的交易和超过 1 个交易,而不使用 have 子句。

4

2 回答 2

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()大于一个,则意味着他们有多个事务。以上将返回所有超过一个的人。如果您只想要一个包含多个交易的帐户列表,那么您可以使用:

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 回答
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 回答