字段一    字段二
中国        1 
中国        1
美国        1
美国        1
英国        1
荷兰        1
新西兰      2
印度        2
美国        2
美国        2
美国        2
美国        2
加拿大      2我要的结果为
字段二  中国  美国  英国  荷兰  新西兰  印度  加拿大
  1     2(个)   2     1    0      1      1      0
  2      0      4     0    0      1      1      1
国家为动态的 不能写成静态的

解决方案 »

  1.   

    create   table   #(name     varchar(100),subject     varchar(10)   ,   score   int) 
    insert   #   values( 'Olive', 'english '   ,   60) 
    insert   #   values( 'KaKu', 'chinese '   ,   80) 
    insert   #   values( 'Kitty', 'chinese '   ,   90) 
    insert   #   values( 'KaKu', 'english '   ,   100) 
    insert   #   values( 'Kitty', 'english '   ,   98) 
    insert   #   values( 'Jeffery', 'chinese '   ,   80) 
    insert   #   values( 'Dreams', 'chinese '   ,   75) select   *   from   # declare   @sql   varchar(8000) 
    set   @sql   =   'select     subject       ,   ' 
    select   @sql   =   @sql   +   '   sum(case   name   when   '''+name+ '''   
                                                        then   score     else   0   end)   '+name   + ', ' 
        from   (select   distinct   name   from   #)   as   a select   @sql   =   left(@sql,len(@sql)-1)   +   '   from   #   group   by   subject ' print   @sql 
    exec   (@sql) 
    drop   table   # 
    给你个例子看一下,看看啊是你要的效果
      

  2.   

      sum(case   name   when   '''+name+ '''                                                         then   score     else   0   end)
    这是用sum求和 和我的求记录数 差很多
      

  3.   


    create   table   #(name     varchar(100),subject     varchar(10) ) 
    insert   #   values( '中国', '1 ')
    insert   #   values( '中国', '1 ')
    insert   #   values( '美国', '1 ')
    insert   #   values( '美国', '1 ')
    insert   #   values( '英国', '1 ')
    insert   #   values( '荷兰', '1 ')
    insert   #   values( '新西兰', '2')
    insert   #   values( '印度', '2 ')
    insert   #   values( '美国', '2 ')
    insert   #   values( '美国', '2 ')
    insert   #   values( '美国', '2 ')
    insert   #   values( '美国', '2 ')
    insert   #   values( '加拿大', '2 ')select   *   from   # declare   @sql   varchar(8000) 
    set   @sql   =   'select subject , ' 
    select   @sql   =   @sql   +   ' SUM(case name when '''+name+ ''' 
    then   1     else   0   end )   '+name   + ', ' 
        from   (select   distinct   name   from   #)   as   a select   @sql   =   left(@sql,len(@sql)-1)   +   ' from  # group by subject ' print   @sql 
    exec   (@sql) 
    drop   table   # 改造成你的了,看看啊对的?