通过在DB2的5列上使用COUNT子句进行分组
我有5列,我应该多次检查相同的帐号 表:通过在DB2的5列上使用COUNT子句进行分组,db2,Db2,我有5列,我应该多次检查相同的帐号 表: In Out AccountNumber Amount Status ---------------------------------------- 1 2 32345678 458.00 Accepted 12 7 12345678 958.00 Rejected 4 5 12345678 478.00 Rejected 6 1 21345678 40
In Out AccountNumber Amount Status
----------------------------------------
1 2 32345678 458.00 Accepted
12 7 12345678 958.00 Rejected
4 5 12345678 478.00 Rejected
6 1 21345678 408.00 Accepted
期望输出:
12 7 12345678 958.00被拒绝
这是我的疑问:
SELECT AccountNumber, Amount, Status, Out, In
FROM FTM.Table
GROUP BY AccountNumber
HAVING COUNT (AccountNumber) > 1
非常感谢您的帮助。尝试以下方法:
Select AccountNumber, Amount, Status, Out, In
From
(
SELECT AccountNumber, Amount, Status, Out, In
, rownumber() over (partition by AccountNumber) rn
, count(1) over (partition by AccountNumber) cnt
FROM FTM.Table
)
where cnt>1 and rn=1;
连接到另一个表
期望的结果是什么?期望的结果应该如下所示,因为账号不止一次:输出12 7 12345678 958.00被拒绝为什么要返回这一行,而不是另一行具有相同账号?其实没关系,它可以返回任何一行。Brainsien,非常感谢,我现在确实看到了所有唯一的帐号,如果我想加入一个新表,我应该像下面这样做。选择T1.AccountNumber,T1.Amount,T1.Status,T2.Out,T2.In From选择AccountNumber,Amount,Status,Out,In,rownumber over partition by AccountNumber rn,count1 over partition by AccountNumber cnt From FTM.Table AS T1 JOIN FTM.Table AS T1 ON ID=ID,其中cnt>1且rn=1;从FTM中选择T1.AccountNumber、T1.Amount、T1.Status、T2.Out、T2.In,从FTM中选择AccountNumber、Amount、Status、Out、In、ID、按AccountNumber rn划分的rownumber、按AccountNumber cnt划分的count1。表T1连接T2.ID=T1.ID上的TFM.Table2 T2,其中T1.cnt>1和T1.rn=1。但这不起作用,它让我加入error@Chris连接错误的完整错误消息是什么?我添加了一个连接到另一个表的示例。按原样运行以进行检查。如果不起作用,那么您的Db2平台和版本是什么?@MarkBarinstein,您的连接条件T2.ID=T1.ID不正确,因为没有这样的T1.ID。
WITH TAB (ID, In, Out, AccountNumber, Amount, Status) AS
(
VALUES
(1, 1, 2, 32345678, 458.00, 'Accepted')
, (2, 12, 7, 12345678, 958.00, 'Rejected')
, (3, 4, 5, 12345678, 478.00, 'Rejected')
, (4, 6, 1, 21345678, 408.00, 'Accepted')
)
Select T1.AccountNumber, T1.Amount, T1.Status, T2.Out, T2.In
From
(
SELECT AccountNumber, Amount, Status, Out, In, ID
, rownumber() over (partition by AccountNumber) rn
, count(1) over (partition by AccountNumber) cnt
FROM TAB
) T1
JOIN TAB T2
ON T2.ID = T1.ID
where T1.cnt>1 and T1.rn=1;