计算SQL Server中的每个不同值

时间:2014-05-15 12:12:47

标签: sql sql-server

我有一张像这样的表tbl_demo

              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

这可以轻松实现,以及如何实现?

1 个答案:

答案 0 :(得分: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;