2011-01-05 87 views
1

我有一个表由transactionID根据employeeID进行的事务处理。每个员工可能有多个同时发生的交易。例如:EmployeeID 1在12处有2个事务。我需要按照每个时间间隔由EmployeeID对事务进行求和。因此,对于employeeID 1,新列(TotalTransactionsByTime)结果将为2.接下来,如果给定TransactionTime的CODE的代码为BAD,则需要排除当时的所有事务增量。因此,对于EmployeeID 2,我需要从结果集中排除所有三个事务,因为它们的代码是'BAD',这会使该增量处的所有事务无效。SQL - 使用相同行聚合结果集中的数据,并根据一列值删除多行

我的表

|EmployeeID|TransactionTime|CODE| 
1  12     GOOD 
1  12     GOOD 
1  5     GOOD 

2  1     BAD --need to omit all 3 transactions for employeeID 2 
2  1     GOOD 
2  1     GOOD 

3  3     GOOD 
3  3     GOOD 

A correct result would look like: 

|EmployeeID | TransactionTime | CODE | NUMBERTRNS 

1   12   GOOD | 2 
1     5   GOOD | 1 
3     3   GOOD | 2 

回答

1
select mt1.EmployeeID, mt1.TransactionTime, mt1.CODE, count(*) as NUMBERTRNS 
    from MyTable mt1 
    where mt1.EmployeeID not in (select EmployeeID from MyTable where CODE = 'BAD') 
    group by mt1.EmployeeID, mt1.TransactionTime, mt1.CODE 
相关问题