zoukankan      html  css  js  c++  java
  • sql中的行转列和列转行的问题

    sql中的行转列和列转行的问题

    这是一个常见的问题,也是一个考的问题

    1.行转列的问题

     简单实例

    CREATE TABLE #T
    (
      MON1 INT,
      MON2 INT,
      MON3 INT
    )
    GO
    INSERT INTO #T VALUES(1,2,3)
    GO
    SELECT * FROM #T
    
    --行转列;(union all)
    
    SELECT MON1 FROM #T
    UNION ALL
    SELECT MON2 FROM #T
    UNION ALL
    SELECT MON3 FROM #T
    GO
    
    --最后的优化
    SELECT * FROM (
    SELECT MON1 FROM #T
    UNION ALL
    SELECT MON2 FROM #T
    UNION ALL
    SELECT MON3 FROM #T
    ) T

     较为复杂的实例

      

    具体实现代码

     --创建表
      GO
      CREATE TABLE #T1(
       NAME NVARCHAR(100),
       CHINESE NVARCHAR(100),
       MATH NVARCHAR(100),
       ENGLISH NVARCHAR(100)
      )
      --插入模拟数据
      SELECT * FROM #T1
      GO
      INSERT INTO #T1 VALUES('张三',80,90,90)
      INSERT INTO #T1 VALUES('李四',47,78,null)
      INSERT INTO #T1 VALUES('王五',null,90,null)
      GO
      SELECT * FROM #T1
      
      --具体代码实现
      GO
      SELECT * FROM (
      SELECT NAME AS '姓名','语文' AS '科目',CHINESE AS '成绩' FROM #T1
      UNION ALL
      SELECT NAME AS '姓名','数学' AS '科目',MATH AS '成绩' FROM #T1
      UNION ALL
      SELECT NAME  AS '姓名','英语' AS '科目',ENGLISH AS '成绩' FROM #T1
      ) T
      order by T.姓名  

    解决方法二

    --列转行的静态方案:UNPIVOT,sql2005及以后版本
      --方法二;这个方法 会自动去除值为 NULL 的值
      SELECT NAME,OBJ,GRADE
      FROM #T1
      UNPIVOT(GRADE FOR OBJ IN (CHINESE,MATH,ENGLISH)) AS UP

    网络上 还流行这个方法

    INFORMATION_SCHEMA.COLUMNS视图中获取列来构造行,同样也使用了XML处理。

    2 列转行

       简单实例

        

    CREATE TABLE #T0
    (
      MON1 INT
    )
    INSERT INTO #T0 VALUES(1)
    INSERT INTO #T0 VALUES(2)
    INSERT INTO #T0 VALUES(3)
    
    SELECT * FROM #T0
    --方法一 仅仅限制于 数据不重复的情况下
    SELECT
    (SELECT MON1 FROM #T0 WHERE MON1=1) '1',
    (SELECT MON1 FROM #T0 WHERE MON1=2) '2',
    (SELECT MON1 FROM #T0 WHERE MON1=3) '3' 

    更多较好的实例:

     http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html

  • 相关阅读:
    加密配置节
    配置使用 SQL Server提供程序 。
    文件上传
    未能正确加载包"visla Studio HTM Editor Package" 问题的解决
    AspNetPager分页控件的使用
    配置MIME一览
    摸器械的结果。。。
    爱一个人
    这两天怪哉。。。
    “落花有意随流水,流水无情恋落花。”出处
  • 原文地址:https://www.cnblogs.com/mc67/p/5487289.html
Copyright © 2011-2022 走看看