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
     
    
  • 相关阅读:
    [收集]Grid Animation-01
    陕西航天大学横幅动态测试
    IPC机制
    Android使用权限
    DDMS
    看懂UML类图和时序图
    Frameworks detected: Android framework is detected in the project
    CoordinatorLayout父布局的Behavior
    Android权限记录
    AndroidManifest.xml文件中属性记录
  • 原文地址:https://www.cnblogs.com/gxpblogs/p/3068875.html
Copyright © 2011-2022 走看看