表中
年份 部门名 动作
2012  A     出差
2012  B     出差
2012  B     出国
2012  B     出国
2011  A     出差
2011  A     出国
2011  B     出差如何得到以下结果:(求SQL语句)
年份  A   B
2012  1   3
2011  2   1

解决方案 »

  1.   

    select
      年份,
      sum(case when 部门名='A' then 1 else 0 end) as 'A',
      sum(case when 部门名='B' then 1 else 0 end) as 'B'
    from
      tb
    group by
      年份
      

  2.   

    select 
    年份
    ,sum(case when 部门名='A'  then 1 else 0 end) as A
    ,sum(case when 部门名='B'  then 1 else 0 end) as B
    from 表
    group by 年份
      

  3.   


    DECLARE @sql NVARCHAR(4000)
    SET @sql='select 年份'
    SELECT @sql=@sql+','+部门名 FROM 表 GROUP BY 部门名
    EXEC(@sql+' from 表 group by 年份 order by 年份 desc')
      

  4.   

    部门名不固定IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
    BEGIN
    DROP TABLE tba
    END
    GO
    CREATE TABLE tba
    (
    年份 INT,
    部门名 VARCHAR(10),
    动作 VARCHAR(10)
    )
    GO
    INSERT INTO tba
    SELECT 2012, 'A', '出差' UNION ALL
    SELECT 2012, 'B', '出差' UNION ALL
    SELECT 2012, 'B', '出国' UNION ALL
    SELECT 2012, 'B', '出国' UNION ALL
    SELECT 2011, 'A', '出差' UNION ALL
    SELECT 2011, 'A', '出国' UNION ALL
    SELECT 2011, 'B', '出差'
    GODECLARE @sql VARCHAR(4000)
    SET @sql='SELECT 年份'
    SELECT @sql=@sql + ',SUM(CASE WHEN 部门名 = ''' + 部门名 + ''' THEN 1 ELSE 0 END) AS ' +  部门名 FROM tba GROUP BY 部门名
    EXEC(@sql+' FROM tba GROUP BY 年份 ORDER BY 年份 DESC')年份 A B
    2012 1 3
    2011 2 1固定用1楼就可以
      

  5.   

    手误改改DECLARE @sql NVARCHAR(4000)
    SET @sql='select 年份'
    SELECT @sql=@sql+','+部门名+'=sum(case when 部门名='''+部门名+''' then 1 else 0 end)' FROM 表 GROUP BY 部门名
    EXEC(@sql+' from 表 group by 年份 order by 年份 desc')其它方法参照
    http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html?seed=562318242
      

  6.   

    create table test([年份] varchar(30), [部门名] varchar(50), [动作] varchar(50))
    go
    insert test
    select '2012', 'A', '出差' union all
    select '2012', 'B','出差' union all
    select '2012', 'B', '出国' union all
    select '2012', 'B', '出国' union all
    select '2011', 'A', '出差' union all
    select '2011', 'A', '出国' union all
    select '2011', 'B', '出差'select * from testdeclare @sql varchar(max)
    declare @sql2 varchar(500)select @sql=isnull(@sql+',','')+'(case when [部门名]='''+[部门名]+''' then [动作] end) as '+t.[部门名]
    ,@sql2=isnull(@sql2+',','')+'count(['+t.[部门名]+']) as '''+t.[部门名]+''''
    from
    ( select distinct [部门名] from test ) t
    set @sql='select [年份], '+@sql2+' FROM (select [年份],'+@sql+' from test) t group by t.[年份]'exec(@sql)drop table test/*
    (7 row(s) affected)
    年份                             部门名                                                动作
    ------------------------------ -------------------------------------------------- --------------------------------------------------
    2012                           A                                                  出差
    2012                           B                                                  出差
    2012                           B                                                  出国
    2012                           B                                                  出国
    2011                           A                                                  出差
    2011                           A                                                  出国
    2011                           B                                                  出差(7 row(s) affected)年份                             A           B
    ------------------------------ ----------- -----------
    2011                           2           1
    2012                           1           3
    (2 row(s) affected)
    */