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
     
    
  • 相关阅读:
    java 导入导出的 命令
    点击 table 单元格 取值
    SQL Server存储过程创建和修改
    js正则匹配过滤 特殊字符
    java 学习框架
    Table 表单样式
    Table 表单
    Table 固定表头的几种方法
    .Net 高效开发之不可错过的实用工具
    sql 批量插入数据到Sqlserver中 效率较高的方法
  • 原文地址:https://www.cnblogs.com/gxpblogs/p/3068875.html
Copyright © 2011-2022 走看看