`
fisherhe
  • 浏览: 53095 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

同一交叉表的动态SQL例子

SQL 
阅读更多
DECLARE

 TYPE list IS TABLE OF t_stu.subject%TYPE INDEX BY BINARY_INTEGER;
 subject_list list;
 v_pro_num NUMBER; 
 sql_str VARCHAR(255); 

BEGIN

 SELECT COUNT(DISTINCT subject) INTO v_pro_num FROM t_stu;
 sql_str := 'SELECT id '; 
 
 FOR v_idx in 1..v_pro_num LOOP
 
  IF v_idx = 1 THEN
  
   SELECT DISTINCT subject INTO subject_list(v_idx) FROM t_stu WHERE rownum = 1;
   
  ELSE
  
   SELECT subjectINTO subject_list(v_idx)
   FROM (SELECT DISTINCT subject, rownum row_num FROM t_stu WHERE rownum < v_idx + 1) 
   WHERE row_num = v_idx;
   
  END IF;
  
  sql_str := sql_str || ', SUM(DECODE(subject,''' || subject_list(v_idx) || ''',score,0)) AS ' || subject_list(v_idx);
  
 END LOOP;
 
 sql_str := sql_str || ' FROM t_stu GROUP BY id';
 DBMS_OUTPUT.PUT_LINE('sql--->' || sql_str);
  
 EXEC IMMEDIATE sql_str;
  
END;

 原始表结构:

SID SUBJECT SCORE
1 数学 99
1 英语 68
1 法律 79
2 数学 92
2 英语 72
2 法律 96

实现后的:

SID 数学 英语 法律
1 99 68 79
2 92 72 96

 

 

分享到:
评论

相关推荐

    sql交叉表中是使用

    下面我们将通过一个具体的例子来详细探讨如何在 SQL Server 中使用交叉表,以及在实际操作过程中可能会遇到的一些小问题。 #### 1. 创建临时表和插入数据 首先,我们需要创建一个临时表 `#mpsl` 并向其中插入一些...

    逐月对比的交叉表处理

    总的来说,这个例子展示了如何在SQL环境中处理交叉表数据,并计算逐月的增长率。这种技巧对于分析时间序列数据,尤其是财务或人力资源数据非常有用,可以帮助管理者快速了解员工工资的变化趋势,从而做出相应的决策...

    SQL.zip_capf1r_sql

    这个例子中,`Orders`表和`Customers`表通过`CustomerID`字段联结,返回所有有对应客户的订单。 2. 自然联结(NATURAL JOIN) 自然联结是基于两个表之间共享的列自动进行联结的一种方式。它不需要显式地指定`ON`...

    SQL性能优化

     在FROM后面的表中的列表顺序会对SQL执行性能影响,在没有索引及ORACLE没有对表进行统计分析的情况下ORACLE会按表出现的顺序进行链接,由此因为表的顺序不对会产生十分耗服务器资源的数据交叉。(注:如果对表进行...

    SQL语法大全

    sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据...

    数据库管理与开发项目教程-教案-07项目四:使用T-SQL查询表数据-任务3连接查询.docx

    - 自连接:一个表与自身进行连接,常用于比较同一表中的不同行。 - 外连接: - 左外连接:返回左表的所有行及右表与左表匹配的行,右表无匹配行则显示NULL。 - 右外连接:返回右表的所有行及左表与右表匹配的行...

    Oracle Sql基础 宝典系列1

    - **自连接**:用于在同一表的不同实例之间进行连接。 - **SQL1999连接语法介绍** - **交叉连接**:返回所有可能的行组合。 - **自然连接**:基于公共列进行连接。 - **ON子句**:用于指定连接条件。 #### 第5章...

    SQL左外连接,右外连接,全连接,内连接4种连接的区别[归类].pdf

    此外,还有交叉连接(CROSS JOIN),也称为笛卡尔积,它会返回左表的每一行与右表的每一行的组合,结果集的大小是两个输入表行数的乘积。 在SQL代码示例中,使用临时表`@TA`和`@TB`展示了不同类型的连接。内连接的...

    详解SQL Server数据库链接查询的方式

    在SQL Server数据库中,链接查询是用于合并两个或更多表中的数据的关键操作。本文将深入探讨内连接、外连接和交叉连接这三种主要的连接类型。 首先,内连接(INNER JOIN)是基于指定条件筛选出两个表中匹配的行。内...

    数据库内外连接举例

    例如,如果有一个`authors`表和一个`publishers`表,内连接可以用来找出居住在同一城市和州的作者和出版商。内连接的SQL语句可能如下所示: ```sql SELECT a.au_fname, a.au_lname, p.pub_name FROM authors AS a ...

    魔乐在线Oracle笔记超经典.docx

    根据提供的文档信息,我们...以上是对给定文档中的Oracle SQL知识点进行了详细的总结和解释,涵盖了多表查询的基本语法、统计记录数、左右连接的概念和用法、SQL:1999标准下的交叉连接、组函数和分组统计等方面的内容。

    oracle 优化 规则

    当这个SQL语句多次执行,但`:pin`的值不同时,Oracle会认为这是一个相同的SQL语句,从而只进行一次解析并多次使用同一执行计划。 #### 五、查询顺序选择 在多表联接查询中,查询顺序的选择对性能也有着重要的影响...

    oracle 数据库入门详细介绍

    自连接是指一个表与自身进行连接,这在需要比较同一表中的不同记录时非常有用。 **示例代码**: ```sql SELECT e1.ename as emp_name, e2.ename as manager_name FROM emp e1, emp e2 WHERE e1.mgr = e2.empno; ```...

    arcgis工具

    当查询ArcInfo coverages, shape文件, INFO表以及dBASE表时,SQL表达式中的字段名必须用双引号扩起。如:“AREA”,如果查询的是个人地理数据库数据,则需要将字段名包含在方括号内,如:[AREA],如果查询的是ArcSDE...

    2021-2022计算机二级等级考试试题及答案No.12303.docx

    - **选择查询、交叉表查询、参数查询、SQL查询和动作查询**(选项A):Access支持多种类型的查询,包括但不限于选择查询、交叉表查询、参数查询、SQL查询和动作查询。其中,选择查询是最常见的查询类型,用于从一个...

    2021-2022计算机二级等级考试试题及答案No.3157.docx

    - **详细解释**:在Access数据库中,交叉表查询是一种特殊的查询类型,它将来自同一表或多个表中的行转换成列以显示汇总数据。创建交叉表查询时,需要指定三种类型的字段:行标题(Row Headers)、列标题(Column ...

    2021-2022计算机二级等级考试试题及答案No.11278.docx

    20. 交叉表查询数据源:交叉表查询可以从数据库文件、表、查询中选择数据源。 21. C 语言程序执行:程序`fun`并没有改变形参`a`、`b`、`c`的实际值,因此主函数中的变量`x`、`y`、`z`的值不变,输出仍为初始值10、...

Global site tag (gtag.js) - Google Analytics