我的数据库表中有字段“State”(范围为1到4的int类型的数据),现在我需要使用COUNT语句(不用SUM函数)来分别统计State=1的列数,State=2的列数,State=3的列数,State=4的列数等,请问该如何编写SQL语句。

解决方案 »

  1.   

    SELECT SUM(CASE WHEN STATE=1 THEN 1 ELSE 0 END)
    ,SUM(CASE WHEN STATE=2 THEN 1 ELSE 0 END)
    ,SUM(CASE WHEN STATE=3 THEN 1 ELSE 0 END)
    ,SUM(CASE WHEN STATE=4 THEN 1 ELSE 0 END)
    FROM TB
      

  2.   

    --1
    select 
    (select count(1) from tb where State = 1) [1],
    (select count(1) from tb where State = 2) [2],
    (select count(1) from tb where State = 3) [3],
    (select count(1) from tb where State = 4) [4]
    --2
    select 
      sum(case State when 1 then 1 else 0 end) [1],
      sum(case State when 2 then 1 else 0 end) [2],
      sum(case State when 3 then 1 else 0 end) [3],
      sum(case State when 4 then 1 else 0 end) [4]
    from tb
      

  3.   


    select distinct state,count(1) over (partition by state) from tab
      

  4.   

    select distinct state,count(1) over (partition by state) from tab学习了!
      

  5.   

    哎,SQLSERVER2005才有partition这个函数吗?