zoukankan      html  css  js  c++  java
  • 表中数据的行转列

    use master

    go

     

    if exists(select name from sys.databases where name='Data')

    drop database Data

    go

     

    create database Data

    go

     

    use Data

    go

     

    if exists(select name from sys.objects where name='studentOne')

    drop table studentOne

    go

     

    create table studentOne

    (

        studentName nvarchar( 10 ),

        studentSubject  nvarchar( 10 ),

        result int

    )

    go

     

    insert into studentOne(studentName,studentSubject,result) values(' 张三' , ' 语文' , 80)

    insert into studentOne(studentName,studentSubject,result) values(' 张三' , ' 数学' , 90 )

    insert into studentOne(studentName,studentSubject,result) values(' 张三' , ' 物理' , 85)

    insert into studentOne(studentName,studentSubject,result) values( ' 李四' , ' 语文' , 85)

    insert into studentOne(studentName,studentSubject,result) values(' 李四' , ' 数学' , 92 )

    insert into studentOne(studentName,studentSubject,result) values( ' 李四' , ' 物理' , 82)

    insert into studentOne(studentName,studentSubject,result) values(' 李四' , ' 化学' , 82)

    go

     

    select * from studentOne

    go

     

    ---------------------------

    --行转列

    ---------------------------

    --步骤一:

    select studentName from studentOne group by studentName

     

    --步骤二:

    select studentName,max(case when studentSubject='语文' then result end) as '语文' from studentOne group by studentName

    --步骤三:

    select studentName,isnull(sum(case when studentSubject='语文' then result end),0) as '语文' from studentOne group by studentName

     

    --解释:

    /*

    按照上面的三个步骤分别看一下是什么结果

    解释第二句:按照语文这个条件找,找到相对应的分数

    可以看出值都是null这个时候就要用到isnull将值进行转换(转成)

     

    */

     

    declare @sql varchar(4000)

    set @sql=' select studentName '

    select @sql= @sql+' ,isnull(max(case studentSubject when ''' +studentSubject+ ''' then result end),0) ['+studentSubject+']'

    from (select distinct studentSubject from studentOne) as temp

    select @sql=@sql+' from studentOne group by studentName'

    print @sql

    exec (@sql)

     

    ---------------------------

    --列转行

    ---------------------------

    if exists(select name from sys.objects where name='studentTwo')

    drop table studentTwo

    go

     

    create table studentTwo

    (

        studentName nvarchar( 10 ),

        化学 int ,

        数学 int ,

        物理 int  ,

        语文 int

    )

    go

     

    insert into studentTwo(studentName,化学,数学,物理,语文) values(' 李四' , 82 , 92 , 82 , 85)

    insert into studentTwo(studentName,化学,数学,物理,语文) values(' 张三' , 0 , 90 , 85 , 80 )

    go

     

    select * from studentTwo

    go

     

    select '李四' as studentName,studentName='化学',化学 as  result from studentTwo where studentName='李四'

    union all

    select '李四' as studentName,studentName='数学',数学 as  result from studentTwo where studentName='李四'

    union all

    select '李四' as studentName,studentName='物理',物理 as  result from studentTwo where studentName='李四'

    union all

    select '李四' as studentName,studentName='语文',语文 as  result from studentTwo where studentName='李四'

    union all

    select '张三' as studentName,studentName='化学',化学 as  result from studentTwo where studentName='张三'

    union all

    select '张三' as studentName,studentName='数学',数学 as  result from studentTwo where studentName='张三'

    union all

    select '张三' as studentName,studentName='物理',物理 as  result from studentTwo where studentName='张三'

    union all

    select '张三' as studentName,studentName='语文',语文 as  result from studentTwo where studentName='张三'

    go

     

    declare @sql varchar(4000)

    set @sql=''

    select @sql=@sql+' select '''+studentName+''' as studentName,studentName=''化学'',化学as result from studentTwo where studentName='''+studentName+'''

    union all

     

    select '''+studentName+''' as  studentName,studentName=''数学'',数学as result from studentTwo where studentName='''+studentName+'''

    union all

     

    select '''+studentName+''' as  studentName,studentName=''物理'',物理as result from studentTwo where studentName='''+studentName+'''

    union all

     

    select '''+studentName+''' as  studentName,studentName=''语文'',语文as result from studentTwo where studentName='''+studentName+'''

    union all'

     

    from (select studentName from studentTwo) as temp

    select @sql=left(@sql,len(@sql)-10)

     

    print @sql

    execute (@sql)

     

     

  • 相关阅读:
    pycharm的background task一直更新index,速度慢的解决方法
    第一章 图像处理基础(直方图、高斯滤波、直方图均衡化)
    下载及配置Python+openCV
    封装axios的接口请求数据方法
    better-scroll封装上拉刷新,下拉加载更多功能
    封装js插件(loading)
    商品列表跳转详情页(项目过程思路)
    setInterval踩坑记
    Vue组件封装(以封装一个button组件为例)
    组件传值的方式
  • 原文地址:https://www.cnblogs.com/meroselove/p/2141692.html
Copyright © 2011-2022 走看看