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)

     

     

  • 相关阅读:
    spring 定时任务
    maven出现(请使用source 5 或者更高版本以启用XX)问题解决
    eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
    开源 免费 java CMS FreeCMS标签 linkClass .
    相对你们说的一些话
    就业形势如此的严峻,你为何不努力?
    使用C#操作XML文件
    优秀学生专栏——董超
    想对你们每个人说的话
    班级第一次问卷调查
  • 原文地址:https://www.cnblogs.com/meroselove/p/2141692.html
Copyright © 2011-2022 走看看