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
     
    
  • 相关阅读:
    编译原理-词法分析01-扫描程序
    编译原理-概论-02
    编译原理-概论-01
    web api :Action Results in Web API 2
    git 学习笔记7--branch
    git 学习笔记6--remote & log
    杭电acm 1230 火星a+b(进制)
    杭电acm 1214 圆桌会议(冒泡排序)
    杭电acm 1210 Eddy's 洗牌问题
    杭电acm 1207 汉诺塔II
  • 原文地址:https://www.cnblogs.com/gxpblogs/p/3068875.html
Copyright © 2011-2022 走看看