2012-04-03 48 views
1

我有一个包含三列用户的表。将用户和值列表汇总到一个表中,其中包含用户列表和计数值

Username Accepted Rejected 

User 1  1   NULL 
User 1  1   NULL 
User 1  NULL   1 
User 2  1   1 
User 3  1   NULL 
User 3  1   NULL 
User 2  NULL   1 
User 3  NULL   NULL 
User 2  NULL   NULL 

我想显示所有用户提供接受计数/拒绝列像这样的列表:

Username Accepted Rejected 
User 1  2   1 
User 2  1   2 
User 3  2   NULL 

什么是做到这一点的最好方法是什么?

+0

你尝试过什么到目前为止?您是否查看了COUNT()和SUM()的文档? – Pondlife 2012-04-03 09:10:06

+0

我试着用CASE和GROUP BY,但还没有。 – AFD 2012-04-03 09:11:19

回答

2

如果接受与拒绝可以包含1,0和空只使用金额,因为如果提供的所有值都为空总和将返回null:

select UserName, 
     sum(Accepted) Accepted, 
     sum(Rejected) Rejected 
    from ATable 
group by UserName 

伯爵将在用户3的拒绝列返回零。

+0

Nikola,你的解决方案看起来类似于http://stackoverflow.com/questions/2723157/how-can-i-turn-a-bunch-of-rows-into-aggregated-columns-without-using-pivot-in-平方,我正在尝试。它看起来会让我在那里。计数可能会更好,因为只有在“已接受”和“已拒绝”均不为0值的情况下,才会在SSRS报告tablix中显示行。 – AFD 2012-04-03 09:17:17

1

SELECT u.username, CASE WHEN COUNT(u.accepted)= 0 THEN NULL ELSE COUNT(u.accepted) END AS接受, CASE WHEN COUNT(u.rejected)= 0 THEN NULL ELSE COUNT (u.rejected) END被否决 FROM USR1ü

GROUP BY u.username