2012-07-31 86 views
2

我们有以下数据。SQL:每字段值计数输出表

TestName Stage1 Stage2 Stage3 Stage4 
Test1  John Calra John Calre 
Test2  Calra null John Calra 

我们需要实现一个以下面的格式显示数据的查询。

User Stage1count Stages2Count Stages3count Stages4Count 
John   1    0    2    0 
Calra  1    1    0    2 

感谢 约翰

+0

使用子查询。但没有成功。 – user990897 2012-07-31 06:50:09

+3

嗨,约翰。你还没有指定一个问题。此外,您的文章显示没有尝试解决问题,并且看起来像您希望其他人为您完成工作。你能否编辑你的问题给我们一个想法,你已经尝试了什么,什么不适合你?有关于在[常见问题](http://stackoverflow.com/faq)中发布好问题的提示。 – 2012-07-31 06:50:31

回答

2

你可以使用一个union数据标准化的。在此之后,一个普通pivot战略将工作:

select Name 
,  sum(case when Stage = 1 then 1 end) as Stage1count 
,  sum(case when Stage = 2 then 1 end) as Stage2count 
,  sum(case when Stage = 3 then 1 end) as Stage3count 
,  sum(case when Stage = 4 then 1 end) as Stage4count 
from (
     select 1 as Stage 
     ,  Stage1 as Name 
     from YourTable 
     union all 
     select 2 as Stage 
     ,  Stage2 as Name 
     from YourTable 
     union all 
     select 3 as Stage 
     ,  Stage3 as Name 
     from YourTable 
     union all 
     select 4 as Stage 
     ,  Stage4 as Name 
     from YourTable 
     ) as SubQueryAlias 
group by 
     Name 
0

尝试这个

drop table tests 
    CREATE TABLE tests(TestName varchar(10),Stage1 varchar(10),Stage2 varchar(10),Stage3 varchar(10),Stage4 varchar(10)) 
    INSERT INTO tests 
    VALUES('Test1','John','Calra','John','Calra'),('Test2','Calra',null,'John','Calra') 

select * from tests 

    select 'John' as [User] 
      ,SUM(case when stage1='John' then 1 else 0 end) as stage1 
      ,SUM(case when stage2='John' then 1 else 0 end) as stage2 
      ,SUM(case when stage3='John' then 1 else 0 end) as stage3 
      ,SUM(case when stage4='John' then 1 else 0 end) as stage4 
    from tests 
    UNION 

    select 'Calra' as [User] 
      ,SUM(case when stage1='Calra' then 1 else 0 end) as stage1 
      ,SUM(case when stage2='Calra' then 1 else 0 end) as stage2 
      ,SUM(case when stage3='Calra' then 1 else 0 end) as stage3 
      ,SUM(case when stage4='Calra' then 1 else 0 end) as stage4 
    from tests