2012-05-03 22 views
1

如果我有一个带状态字段的表格,并且想知道每个状态有多少条记录,我可以通过一个简单的群组来完成。如果我想知道2个记录的计数和所有其他记录的计数,那么如何?如何按通用字段进行分组?

换句话说,我想这一点:

Status Count 
-------- ----- 
Success X 
Running Y 
Failure Z 

失败not失败在桌子上,它包含实际的错误信息,所以我想要的一切,这就是不同之处在于成功正在运行

回答

3
select case when Status <> 'Success' 
      and Status <> 'Running' 
      then 'Failure' 
      else Status 
     end Status, 
     count (*) [Count] 
from atable 
group by case when Status <> 'Success' 
       and Status <> 'Running' 
       then 'Failure' 
       else Status 
      end 
+0

谢谢尼古拉,我最终做了像你建议的事情。 – Diego

1
SELECT DISTINCT CASE 
        WHEN [status]='s' OR [STATUS]='r' THEN [status] 
        ELSE 'OTHER' 
       END AS STATUS 
     ,COUNT(1) OVER(
      PARTITION BY CASE 
          WHEN [status]='s' 
      OR [STATUS]='r' THEN [status] ELSE 'aaa' END 
     ) AS 'count' 
FROM tbl2 

enter image description here

+1

这将给出每个不同状态的计数。这个问题表明,除'成功'和'跑步'之外的所有应该被归类为'失败' – Tobsey

+0

@Tobsey我已经修复了它 –

+2

@Tobsey欢迎您来测试它。 - 我刚刚做了 –

3

Click here to view the demo in SQL Fiddle.

脚本

CREATE TABLE errormsgs 
(
    id   INT   NOT NULL IDENTITY 
    , statusmsg VARCHAR(30) NOT NULL 
); 

INSERT INTO errormsgs (statusmsg) VALUES 
    ('Success'), 
    ('This is error message 1.'), 
    ('Running'), 
    ('This is error message 2.'), 
    ('This is error message 3.'), 
    ('Success'), 
    ('Success'), 
    ('This is error message 4.'), 
    ('Running'), 
    ('failure, may be'), 
    ('failure, absolutely.'); 

;WITH statuses AS 
(
    SELECT CASE 
       WHEN statusmsg NOT IN ('Success', 'Running') THEN 'Failure' 
       ELSE statusmsg 
      END status 
    FROM errormsgs 
) 
SELECT  status 
     , COUNT(status) AS status_count 
FROM  statuses 
GROUP BY status; 

输出

STATUS STATUS_COUNT 
-------- ------------ 
Failure  6 
Running  2 
Success  3 
+0

感谢您的帮助 – Diego

相关问题