员工插入和更新的计数

时间:2018-02-23 06:12:40

标签: sql-server

I / P

Id Name   InsertBy UpdateBy
1  A       2         2
2  B       1         2
3  C       4         3
4  D       4         5 
5  E       1         3

O / P(插入时员工ID的数量和更新中的EMPID数)

Name InsertBy  UpdateBy  
 A       2         0
 B       1         2
 C       0         2
 D       2         0 
 E       0         1

1 个答案:

答案 0 :(得分:1)

您似乎需要使用单独的查询(Inserted, Updated)进行自我加入,以便更安全。

SELECT 
       t.name, a.insertBy, b.updateBy 
FROM table t
INNER JOIN
(
    SELECT 
           t.id, count (t1.insertBy) insertBy
    FROM table t
    LEFT JOIN table t1 on t1.insertBy = t.id
    GROUP BY t.id
)a on a.id = t.id
INNER JOIN
(
    SELECT 
           t.id, count (t2.updateBy) updateBy
    FROM table t
    LEFT JOIN table t2 on t2.updateBy = t.id
    GROUP BY t.id

)b on b.id = t.id 

让我使用其他方法进行编辑,使用单独的join

更高效
select t1.name, sum(case when a.Name = 'InsertedBy' then 1 else 0 end) InsertBy,
                sum(case when a.Name = 'UpdatedBy' then 1 else 0 end) UpdateBy    
from table t
cross apply (
    values (InsertBy, 'InsertedBy'), (UpdateBy, 'UpdatedBy')
)a(Types, Name)
LEFT JOIN table t1 on t1.Id = a.Types
group by t1.name

但是,这些将使用索引(Id