2012-05-03 2 views
1

상태 필드가있는 테이블이 있고 각 상태의 레코드 수를 알고 싶으면 간단한 그룹을 수행 할 수 있습니다. 그리고 두 레코드의 개수와 다른 모든 레코드의 개수를 알고 싶다면 어떨까요?일반 필드로 그룹화하려면 어떻게해야합니까?

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

감사합니다. Nikola, 나는 당신이 제안한 것과 같이 일을 끝냈습니다. – 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

관련 문제