sql统计多个字段值数量

如A表:姓名,班级,得分,考试时间,需要新建B表:班级,一月总分,二月总分,三月总分.....请问要如何实现,谢谢!... 如A表:姓名,班级,得分,考试时间,
需要新建B表:班级,一月总分,二月总分,三月总分.....
请问要如何实现,谢谢!
展开
 我来答
日落的糖Kf
2019-02-25 · TA获得超过4万个赞
知道大有可为答主
回答量:3400
采纳率:0%
帮助的人:545万
展开全部

分两步实现

  1. 按月汇总

  2. 行列转换

    请试一下,如有疑问,及时沟通!

  3. ----生成相应的技巧性文章
    create table #maomao365
    (
    [姓名] nvarchar(30),
    [班级] nvarchar(20),
    [分数] int,
    [考试时间] date
    )
    go

    insert into #maomao365 (
     [姓名],[班级],
    [分数],[考试时间]
    )values
    ('张三','一班',89,'2019-1-1'),
    ('李四','二班',100,'2019-1-1'),
    ('王二','三班',60,'2019-1-1'),
    ('马子','四班',70,'2019-1-1'),
    ('maomao','一班',89,'2019-1-1'),
    ('小屋','二班',15,'2019-2-1'),
    ('sql','三班',69,'2019-2-1'),
    ('教程','四班',72,'2019-2-1'),
    ('宇宙','一班',63,'2019-3-1'),
    ('周猫猫','一班',50,'2019-4-1'),
    ('宙斯盾','二班',23,'2019-5-1'),
    ('潜水艇','三班',21,'2019-6-1'),
    ('其它','四班',20,'2019-7-1')
    go

     
     

    /*拼接字符串*/
    declare @sql varchar(max)
    set @sql =' select * from 
     (select  [班级],
    [分数],month([考试时间]) as month from  #maomao365) as d
       pivot(sum([分数]) for [month] 
       in( 
     ';



    /*动态组合列名*/
     declare @lieMing varchar(7000)   ---定义动态生成列名存放变量
     declare @i int ,@imax int,@field varchar(60)  ---定义临时循环变量
     declare @fieldList table(keyId int identity,field varchar(60)) ---定义临时表,存放待生成动态列名的数据
     insert into @fieldList(field) select distinct month([考试时间]) from #maomao365  ---生成列名数据
     
     -------------循环表生成列名start--------------
     set @lieMing =''
     set @i=1 
     select @imax =max(keyId) from @fieldList t
     while @i <@imax 
     begin
        select @field =field from @fieldList t where t.keyId=@i
        if isnull(@field,'') !=''
         begin
            if @lieMing !='' begin set @lieMing =@lieMing +',' end
            set @lieMing = @lieMing+'['+@field+']';
         end
        set @i=@i+1
     end
      -------------循环表生成列名end--------------
    /*动态组合列*/

    set @sql =@sql +@lieMing +' ))  t ;';    ---拼接sql语句

    print (@sql)

    exec  (@sql)           


    go
    truncate table  #maomao365
    drop     table  #maomao365 
    go
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式