`
showmystage
  • 浏览: 56527 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据横排

SQL 
阅读更多
sql 代码
  1. 总结一下关于行列转置的实现方法   
  2.   
  3.   
  4. 1、固定列数的行列转换   
  5. 如   
  6. student subject grade   
  7. --------- ---------- --------   
  8. student1 语文 80   
  9. student1 数学 70   
  10. student1 英语 60   
  11. student2 语文 90   
  12. student2 数学 80   
  13. student2 英语 100   
  14. ……   
  15. 转换为   
  16. 语文 数学 英语   
  17. student1 80 70 60   
  18. student2 90 80 100   
  19. ……   
  20. 语句如下:select student,    
  21. sum(decode(subject,'语文', grade,null)) "语文",   
  22. sum(decode(subject,'数学', grade,null)) "数学",   
  23. sum(decode(subject,'英语', grade,null)) "英语"  
  24. from table  
  25. group by student;   
  26.     
  27.   
  28. 2、不定列行列转换   
  29. 如   
  30. c1 c2   
  31. --- -----------   
  32. 1 我   
  33. 1 是   
  34. 1 谁   
  35. 2 知   
  36. 2 道   
  37. 3 不   
  38. ……   
  39. 转换为   
  40. 1 我是谁   
  41. 2 知道   
  42. 3 不   
  43.   
  44. 这一类型的转换可以借助于PL/SQL来完成,这里给一个例子   
  45. CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)   
  46. RETURN VARCHAR2   
  47. IS  
  48. Col_c2 VARCHAR2(4000);   
  49. BEGIN  
  50. FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP   
  51. Col_c2 := Col_c2||cur.c2;   
  52. END LOOP;   
  53. Col_c2 := rtrim(Col_c2,1);   
  54. RETURN Col_c2;   
  55. END;   
  56.   
  57. select distinct c1 ,get_c2(c1) cc2 from table;   
  58.   
  59.   
  60. 或者不用pl/sql,利用分析函数和 CONNECT_BY 实现:   
  61.   
  62. SELECT c1, SUBSTR (MAX (SYS_CONNECT_BY_PATH (c2, ';')), 2) NAME  
  63.     FROM (SELECT c1, c2, rn, LEAD (rn) OVER (PARTITION BY c1 ORDER BY rn) rn1   
  64.             FROM (SELECT c1, c2, ROW_NUMBER () OVER (ORDER BY c2) rn   
  65.                     FROM t))   
  66. START WITH rn1 IS NULL  
  67. CONNECT BY rn1 = PRIOR rn   
  68. GROUP BY c1;   
  69.   
  70.   
  71. 3、列数不固定(交叉表行列转置)   
  72. 这种是比较麻烦的一种,需要借助pl/sql:   
  73.   
  74. 原始数据:   
  75. CLASS1     CALLDATE         CALLCOUNT   
  76. 1          2005-08-08       40   
  77. 1          2005-08-07       6   
  78. 2          2005-08-08       77   
  79. 3          2005-08-09       33   
  80. 3          2005-08-08       9   
  81. 3          2005-08-07       21   
  82.   
  83. 转置后:   
  84. CALLDATE     CallCount1 CallCount2 CallCount3   
  85. ------------ ---------- ---------- ----------   
  86. 2005-08-09   0          0          33   
  87. 2005-08-08   40         77         9   
  88. 2005-08-07  6      0          21   
  89.   
  90. 试验如下:   
  91. 1). 建立测试表和数据   
  92. CREATE TABLE t(   
  93.     class1 VARCHAR2(2 BYTE),   
  94.     calldate DATE,   
  95.     callcount INTEGER  
  96. );   
  97.   
  98. INSERT INTO t(class1, calldate, callcount)   
  99. VALUES ('1', TO_DATE ('08/08/2005', 'MM/DD/YYYY'), 40);   
  100.   
  101. INSERT INTO t(class1, calldate, callcount)   
  102. VALUES ('1', TO_DATE ('08/07/2005', 'MM/DD/YYYY'), 6);   
  103.   
  104. INSERT INTO t(class1, calldate, callcount)   
  105. VALUES ('2', TO_DATE ('08/08/2005', 'MM/DD/YYYY'), 77);   
  106.   
  107. INSERT INTO t(class1, calldate, callcount)   
  108. VALUES ('3', TO_DATE ('08/09/2005', 'MM/DD/YYYY'), 33);   
  109.   
  110. INSERT INTO t(class1, calldate, callcount)   
  111. VALUES ('3', TO_DATE ('08/08/2005', 'MM/DD/YYYY'), 9);   
  112.   
  113. INSERT INTO t(class1, calldate, callcount)   
  114. VALUES ('3', TO_DATE ('08/07/2005', 'MM/DD/YYYY'), 21);    
  115.   
  116. COMMIT ;    
  117.   
  118. 2). 建立ref cursor准备输出结果集    
  119. CREATE OR REPLACE PACKAGE pkg_getrecord   
  120. IS  
  121.     TYPE myrctype IS REF CURSOR;   
  122. END pkg_getrecord;   
  123. /   
  124.   
  125. 3). 建立动态sql交叉表函数,输出结果集    
  126. CREATE OR REPLACE FUNCTION fn_rs   
  127.     RETURN pkg_getrecord.myrctype   
  128. IS  
  129.     s VARCHAR2 (4000);    
  130.     CURSOR c1 IS  
  131.     SELECT ',sum(case when Class1='   
  132.             || class1   
  133.             || ' then CallCount else 0 end)'   
  134.             || ' "CallCount'  
  135.             || class1  
  136.             || '"' c2   
  137.     FROM t   
  138.     GROUP BY class1;   
  139.     r1 c1%ROWTYPE;   
  140.     list_cursor pkg_getrecord.myrctype;   
  141. BEGIN  
  142.     s := 'select CallDate ';   
  143.     OPEN c1;   
  144.     LOOP   
  145.         FETCH c1 INTO r1;   
  146.         EXIT WHEN c1%NOTFOUND;   
  147.         s := s || r1.c2;   
  148.     END LOOP;   
  149.     CLOSE c1;   
  150.     s := s || ' from T group by CallDate order by CallDate desc ';   
  151.     OPEN list_cursor FOR s;   
  152.     RETURN list_cursor;   
  153. END fn_rs;   
  154. /    
  155.   
  156. 4). 测试在sql plus下执行:   
  157. var results refcursor;   
  158. exec :results := fn_rs;   
  159. print results;   
  160. CALLDATE        CallCount1 CallCount2 CallCount3   
  161. --------------- ---------- ---------- ----------   
  162. 2005-08-09      0          0          33   
  163. 2005-08-08      40         77         9   
  164. 2005-08-07      6          0          21   
分享到:
评论

相关推荐

    SQL创建存储过程[横向显示列的数据]

    在这个特定的场景中,我们关注的是如何使用存储过程来实现“横向显示列的数据”。这通常涉及到数据的旋转或者透视,即把行转换为列。这种操作在数据分析和报表展示中非常常见。 首先,让我们了解存储过程的基本创建...

    GB2312字库(竖置横排)点阵数据

    《GB2312字库:竖置横排点阵数据详解》 GB2312,全称为《信息交换用汉字编码字符集·基本集》,是中国国家标准的汉字编码方案,于1980年发布,是最早广泛应用于中国大陆的汉字编码标准之一。此编码系统包含了6763个...

    Excel数组的转置和变换.rar

    这种操作在处理表格数据时非常实用,比如当需要将某一列数据横排显示时。 二、ERANSPOSE函数的应用 在Excel中,实现数组转置主要依赖于ERANSPOSE函数。ERANSPOSE函数专门用于转置数组或矩阵,其语法为:ERANSPOSE...

    Excel函数应用500例 实例下载

    适用于数据横排的情况。 7. **IF函数**:进行逻辑判断,根据条件返回两个可能的结果。例如,如果销售额超过目标,返回“达成”,否则返回“未达成”。 8. **INDEX/MATCH函数组合**:在某些情况下,这对组合比VLOOK...

    DZ全版本论坛横排覆盖版

    2. **备份数据**:在进行任何模版更换之前,都应先备份数据库和现有模版文件,以防万一出现问题可以恢复。 3. **遵循安装指南**:仔细阅读并按照“安装必读”中的步骤操作,确保正确导入和设置所有文件。 4. **...

    code_R语言_纵向数据_

    在数据分析和统计建模领域,R语言是一种广泛使用的工具,尤其在处理纵向数据或面板数据时,其强大的功能和灵活性得到了专业人士的高度认可。本主题聚焦于如何利用R语言解决纵向数据线性混效应模型(Linear Mixed ...

    易语言 超级列表框 横排 and 竖排+数据库例子 源码

    在这个“易语言 超级列表框 横排 竖排+数据库例子 源码”中,我们可以深入探讨易语言如何处理用户界面组件,特别是超级列表框,并结合数据库进行数据展示。 首先,超级列表框是Windows应用程序中常见的控件,它允许...

    简单大方的横排美化(加板块简介)插件 for PHPwind7.5.rar

    1. **备份数据**:在进行任何修改前,务必备份数据库和现有模板文件,以防意外情况导致数据丢失。 2. **兼容性检查**:虽然插件标榜为PHPwind7.5版本,但最好先在测试环境中安装并测试,确认无误后再应用于正式环境...

    discuz论坛插件DZ插件 discuz版块横排美化 v1.2.1版 X3.2(1)

    此外,值得注意的是,虽然这款插件旨在美化版块展示,但其可能对其他插件或模板产生影响,因此在安装前应备份原有数据和设置,以防止可能出现的不兼容问题。同时,定期检查更新,确保插件与论坛系统的兼容性,以保持...

    最土团购系统首页 横排 插件

    【标题】"最土团购系统首页横排插件"是一个专为团购网站设计的界面组件,主要用于提升用户体验和展示商品信息。"最土"可能是该系统或开发团队的品牌名称,而"zutu"可能是其拼音缩写或者系统代号。这个插件的设计理念...

    横排flash+xml图片推荐展示程序.rar

    标题中的“横排flash+xml图片推荐展示程序”指的是一个基于Flash技术,并利用XML文件来管理图片数据的横幅式图片展示应用。这个程序设计用于在网页上以水平滚动的方式展示一组图片,为用户提供一个交互式的浏览体验...

    asp 横排显示数据

    这个过程主要涉及到从数据库中检索数据,然后按照要求的格式在网页上展示。下面将详细解释上述代码中包含的知识点。 首先,理解ASP中的表格制作流程,它类似于HTML中的表格制作,但ASP代码能够根据从数据库中检索到...

    最土团购系统 首页 横排 插件 最土 zutu 团购

    "最土团购系统"是一个专为团购业务设计的平台,其首页横排插件是该系统的核心特色之一。在这个系统中,“最土”(Zutu)可能是一个品牌名或者项目代号,代表着该团购系统的独特性和定位。下面将详细探讨这个系统以及...

    横排flash+xml图片推荐展示程序

    【横排flash+xml图片推荐展示程序】是一种基于Adobe Flash技术和XML数据格式的图像展示解决方案。这个程序设计用于在网页上以横向滚动的方式呈现一组图片,为用户提供动态且交互式的浏览体验。以下是关于这个程序...

    字库芯片GT20L16S1Y和GT30L32S4用户数据手册规格书带地址运算版手册资料.zip

    字库芯片GT20L16S1Y和GT30L32S4用户数据手册规格书带地址运算版手册资料 GT20L16S1Y是一款内含16x16点阵的汉字库芯片,支持GB2312国标简体汉字(含有国家信标委合 法授权)、ASCII字符。排列格式为竖置横排。用户...

    横排头像折叠显示.zip

    在Android中,我们可以通过实现RecyclerView.Adapter的onBindViewHolder方法,在绑定数据时为每个ViewHolder设置点击监听器。在iOS中,我们可以为UICollectionViewCell添加 gesture recognizers 或者在 ...

    UltraEdit中将一竖行数据转换为横行

    UltraEdit中将一竖行数据转换为横行 UltraEdit中将一竖行数据转换为横行 UltraEdit中将一竖行数据转换为横行

    Excel入门数据分析

    - **数据转置**:改变数据排列方式,将横排数据转换为竖排,或者相反。 - **字段分列**:将一个字段拆分成多个字段,适用于字段中包含多个有用信息的情况。 - **字段匹配**:将不同数据集中的相关字段进行匹配,以便...

    excel表格如何把横排变成竖排.doc

    如果我们需要将竖排的电子表格数据转换成横排,可以使用复制和选择性粘贴的方法。具体步骤如下: 1. 复制需要转换的竖排数据; 2. 右键点击目标单元格,选择“选择性粘贴”; 3. 在“选择性粘贴”窗口中选择“转置...

    火狼首页横排N格DuceXHome 2.4 For Discuz!7.0.rar

    能方便地展示论坛最新、最热等数据,作为会员入站首要导航,帮助会员最快地参与主题。 无数据库修改,后台模块化管理,自由设置模块展现样式,扩展性强。 支持调用组图图片、远程附件图片、检索帖子外链图片。 ...

Global site tag (gtag.js) - Google Analytics