2014-05-15 65 views
1

我有一个表tbl_demo这样的:在SQL Server中获取计算在每个不同的值

   aliasname is_correct 
        10 INCORRECT 
        10 INCORRECT 
        10 INCORRECT 
        10 CORRECT 
        10 CORRECT 
        10 NOT SOLVED 
        9 INCORRECT 
        9 INCORRECT 
        9 CORRECT 

我创建一个查询:

select 
    aliasname, 
    count(*) as quest_count, 
    is_correct 
from 
    tbl_demo 
group by 
    aliasname, is_correct order by aliasname 

,我得到这样

   aliasname quest_count is_correct 
       --------------------------------- 
       10   2   CORRECT 
       10   3   INCORRECT 
       10   1   NOT SOLVED 
       9   1   CORRECT 
       9   2   INCORRECT 
输出

但我想9中的0而不解决

就像多了一个这样的

   9   0   NOT SOLVED 

行可以这样轻易实现,又如何呢?

回答

3

您可以通过使用cross join和使用left join生成所有可能的组合来引入原始数据。剩下的只是聚合:

select a.aliasname, count(d.aliasname) as quest_count, ic.is_correct 
from (select distinct aliasname from tbl_demo 
    ) a cross join 
    (select distinct is_correct from tbl_demo 
    ) ic left outer join 
    tbl_demo d 
    on d.aliasname = a.aliasname and d.is_correct = ic.is_correct 
group by a.aliasname, ic.is_correct; 
相关问题