zoukankan      html  css  js  c++  java
  • Sql server 中将数据行转列列转行(二)

    老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来:

    /*
        第一步:创建临时表结构
    */
    CREATE TABLE #Student  --创建临时表
    (
        StuName nvarchar(20),    --学生名称
        Chinese int,
        Math int,
        English int
    )
    DROP TABLE #Student      --删除临时表
    SELECT * FROM #Student   --查询所有数据
    
    INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('张三',70,86,96);
    INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('李四',49,85,86);
    INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('王五',59,58,90);
    INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('赵六',68,79,80);

    一:,下面是转换之前与之后的截图对比

      如果想要行转列,参考上一篇:Sql server 中将数据行转列列转行(一)

    方法一:使用 UNION ALL 拼接多个结果集

    复制代码
    SELECT * FROM (
        SELECT StuName,课程='语文',分数=Chinese FROM #Student
      UNION ALL
        SELECT StuName,课程='数学',分数=Math FROM #Student
      UNION ALL
        SELECT StuName,课程='英语',分数=English FROM #Student
    )AS TE
    ORDER BY TE.StuName ASC
    复制代码

    方法二:使用UNPIVOT,推荐此方法;

    SELECT *
    FROM #Student  
    UNPIVOT (分数 FOR 课程 IN([Chinese],Math,English)) T

    方法三:使用UNPIVOT,处理动态列情况,看过我上一篇内容的,应该知道,在进行行转列的时候,有时候不太确定到底有多少行的可能,

    会有动态的情况,但是在处理列转行的情况时,一般每个数据库在进行数据存储的时候,列有多少个,都是已经确定的,不存在不确定性,

    所以,第三种方法知道就可以了,实用性不大,不推荐此方法。

    复制代码
    DECLARE @sql NVARCHAR(4000)
    
    SELECT @sql=isnull(@sql+',','')+quotename(Name)
    FROM syscolumns
    WHERE ID=object_id('Student')
        AND Name NOT IN('StuName')  --不显示学生名称列
    ORDER BY Colid
    --print @sql
    SET @sql='
        SELECT *
        FROM #Student  
        UNPIVOT (分数 FOR 课程 IN('+@sql+')) T
        '
    Exec(@sql)
    复制代码

    注意:上面的这一部分,由于查询了syscolumns 数据库内置系统表,我演示的数据是临时表,是查不到任何数据的,必须创建实际的数据库表才可以使用。

  • 相关阅读:
    easyui datagrid 跨页选择
    (转)flexpaper 参数
    FlexPaper做的类似百度文库的效果
    (转)ashx 使用Session
    (转)C#_WinForm接收命令行参数
    从数据库取出文件流显示图片
    (转)oracle触发器使用:after insert 与before insert的简单使用注意
    (转)sql server 事务与try catch
    (转)sqlite developer注册方法
    (转)IDataGridViewEditingControl 接口 作用
  • 原文地址:https://www.cnblogs.com/itchenguo/p/13181788.html
Copyright © 2011-2022 走看看