zoukankan      html  css  js  c++  java
  • SQL面试题之行列转换

    行列转换--普通
     
    假设有张学生成绩表(CJ)如下
    Name Subject Result
    张三 语文 80
    张三 数学 90
    张三 物理 85
    李四 语文 85
    李四 数学 92
    李四 物理 82
     
    想变成
    姓名 语文 数学 物理
    张三 80 90 85
    李四 85 92 82
     

    1. declare @sql varchar(4000)  
    2. set @sql = 'select Name'  
    3. select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'  
    4. from (select distinct Subject from CJ) as a  
    5. select @sql = @sql+' from test group by name'  
    6. exec(@sql)  
    declare @sql varchar(4000)
    set @sql = 'select Name'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+' from test group by name'
    exec(@sql)


     


    行列转换--合并
     
    有表A,
    id pid
    1 1
    1 2
    1 3
    2 1
    2 2
    3 1
    如何化成表B:
    id pid
    1 1,2,3
    2 1,2
    3 1
     
    创建一个合并的函数

    1. create function fmerg(@id int)  
    2. returns varchar(8000)  
    3. as  
    4. begin  
    5. declare @str varchar(8000)  
    6. set @str=''  
    7. select @str=@str+','+cast(pid as varcharfrom 表A where id=@id  
    8. set @str=right(@str,len(@str)-1)  
    9. return(@str)  
    10. End  
    11. go  
    12.    
    create function fmerg(@id int)
    returns varchar(8000)
    as
    begin
    declare @str varchar(8000)
    set @str=''
    select @str=@str+','+cast(pid as varchar) from 表A where id=@id
    set @str=right(@str,len(@str)-1)
    return(@str)
    End
    go
     
    
  • 相关阅读:
    ubuntu16.04安装jdk1.8(java1.8)
    OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
    Eclipse 的 jsp 页面代码格式化
    php自动加载
    swift 遍历
    swift 赋值判断
    C语言开发环境配置
    C语言之分配
    C语言之指针
    IOS之swift第一课基础代码
  • 原文地址:https://www.cnblogs.com/gxpblogs/p/3068875.html
Copyright © 2011-2022 走看看