- 浏览: 119294 次
文章分类
来源:http://www.itpub.net/thread-1156433-1-1.html
cjh2000提问:
现有数据表中的数据形式为:
名称 数量 单价
a 4 10
b 2 8
现在能否通过一个SQL语句将其变成:
名称 数量 单价
a 1 10
a 1 10
a 1 10
a 1 10
b 1 8
b 1 8
grova解答:
表已创建。
已创建 1 行。
已创建 1 行。
NAME NUM PRICE
---------- ---------- ----------
a 1 10
a 1 10
a 1 10
a 1 10
b 1 8
b 1 8
已选择6行。
atgc解答:
NA F1 F2
-- ---------- ----------
a 4 10
b 2 8
RN
----------
1
2
3
4
NA F1 F2
-- ---------- ----------
a 1 10
a 1 10
a 1 10
a 1 10
b 1 8
b 1 8
6 rows selected.
转帖:利用整数表解决复杂SQL查询——案例二
http://space.itpub.net/15203236/viewspace-590898
问题描述:
Count汇聚一组行,并告诉每一组有多少行数据。但是,如果想得到相反的过程,将汇聚结果回推到多行数据时,该怎么办呢?
一旦得到了汇聚数据,将其分离开来就会十分棘手。例如,有一个包含宾馆房间预订的表bookings,每一行都有一个指明预订第一夜的日期、总费用以及预订天数。
Startwhn
Visitprice
Nights
2005-01-01
100
2
2005-02-01
200
5
在已知这些信息的情况下,弄清楚某个特定夜晚被预订了多少个房间是件困难的事情。我们希望处理这些信息,以便得到这样的结果:客人停留的每一夜都包含一行。Desired表的格式如下:
Startwhn
Whn
prices
2005-01-01
2005-01-01
50
2005-01-01
2005-01-02
50
2005-02-01
2005-02-01
40
2005-02-01
2005-02-02
40
2005-02-01
2005-02-03
40
2005-02-01
2005-02-04
40
2005-02-01
2005-02-05
40
很容易从desired得到booking,但这是我们需要做的事情的反过程:
Select startwhn,sum(price),count(price)
From desired group by startwin;
解决方案:
从booking得到desired需要更深入的思考,可是通过使用一个整数表来解决这个问题:
Integers表包含了单个列,保存了从1到某个更大整数之间的数字,在本问题的情况下,integers表至少要达到任何客人预订的最大天数。这样:
Create table integers(n int primary key);
Insert into integers values(1);
Insert into integers values(2);
Insert into integers values(3);
Insert into integers values(4);
Insert into integers values(5);
……..
或者也可以这样来实现插入数据:
Insert into integers select rownum rn from dual connect by level<=5;
在各种查询中integers都是一个有用的表,生成desired表的关键是将integers交叉连接到bookings上,使用条件n不大于nights:
SQL> select startwhn,startwhn+n-1 as whn, visitprice/nights as price
2 from bookings,integers
3 where n between 1 and nights;
STARTWHN WHN PRICE
-------------- -------------- ----------
01-1月-05 01-1月-05 50
01-1月-05 02-1月-05 50
01-2月-05 01-2月-05 40
01-2月-05 02-2月-05 40
01-2月-05 03-2月-05 40
01-2月-05 04-2月-05 40
01-2月-05 05-2月-05 40
已选择7行。
cjh2000提问:
现有数据表中的数据形式为:
名称 数量 单价
a 4 10
b 2 8
现在能否通过一个SQL语句将其变成:
名称 数量 单价
a 1 10
a 1 10
a 1 10
a 1 10
b 1 8
b 1 8
grova解答:
SQL> create table tt(name varchar2(10),num number,price number);
表已创建。
SQL> insert into tt values('a',4,10);
已创建 1 行。
SQL> insert into tt values('b',2,8);
已创建 1 行。
SQL> commit;
SQL> select name,1 num,price 2 from tt,(select rownum rn from dual connect by level<=5) 3 where rn between 1 and num 4 order by name;
NAME NUM PRICE
---------- ---------- ----------
a 1 10
a 1 10
a 1 10
a 1 10
b 1 8
b 1 8
已选择6行。
atgc解答:
SQL> select * from test;
NA F1 F2
-- ---------- ----------
a 4 10
b 2 8
SQL> select * from test2;
RN
----------
1
2
3
4
SQL> select a.name,1 f1,a.f2 from test a,test2 b 2 where b.rn<=a.f1;
NA F1 F2
-- ---------- ----------
a 1 10
a 1 10
a 1 10
a 1 10
b 1 8
b 1 8
6 rows selected.
转帖:利用整数表解决复杂SQL查询——案例二
http://space.itpub.net/15203236/viewspace-590898
问题描述:
Count汇聚一组行,并告诉每一组有多少行数据。但是,如果想得到相反的过程,将汇聚结果回推到多行数据时,该怎么办呢?
一旦得到了汇聚数据,将其分离开来就会十分棘手。例如,有一个包含宾馆房间预订的表bookings,每一行都有一个指明预订第一夜的日期、总费用以及预订天数。
Startwhn
Visitprice
Nights
2005-01-01
100
2
2005-02-01
200
5
在已知这些信息的情况下,弄清楚某个特定夜晚被预订了多少个房间是件困难的事情。我们希望处理这些信息,以便得到这样的结果:客人停留的每一夜都包含一行。Desired表的格式如下:
Startwhn
Whn
prices
2005-01-01
2005-01-01
50
2005-01-01
2005-01-02
50
2005-02-01
2005-02-01
40
2005-02-01
2005-02-02
40
2005-02-01
2005-02-03
40
2005-02-01
2005-02-04
40
2005-02-01
2005-02-05
40
很容易从desired得到booking,但这是我们需要做的事情的反过程:
Select startwhn,sum(price),count(price)
From desired group by startwin;
解决方案:
从booking得到desired需要更深入的思考,可是通过使用一个整数表来解决这个问题:
Integers表包含了单个列,保存了从1到某个更大整数之间的数字,在本问题的情况下,integers表至少要达到任何客人预订的最大天数。这样:
Create table integers(n int primary key);
Insert into integers values(1);
Insert into integers values(2);
Insert into integers values(3);
Insert into integers values(4);
Insert into integers values(5);
……..
或者也可以这样来实现插入数据:
Insert into integers select rownum rn from dual connect by level<=5;
在各种查询中integers都是一个有用的表,生成desired表的关键是将integers交叉连接到bookings上,使用条件n不大于nights:
SQL> select startwhn,startwhn+n-1 as whn, visitprice/nights as price
2 from bookings,integers
3 where n between 1 and nights;
STARTWHN WHN PRICE
-------------- -------------- ----------
01-1月-05 01-1月-05 50
01-1月-05 02-1月-05 50
01-2月-05 01-2月-05 40
01-2月-05 02-2月-05 40
01-2月-05 03-2月-05 40
01-2月-05 04-2月-05 40
01-2月-05 05-2月-05 40
已选择7行。
发表评论
-
How-to Install Oracle 12c Database on CentOS 6.X 64bit
2014-04-29 03:21 993http://blog.csdn.net/chncaesar ... -
ORA-12537相关?【转载】查看、修改ORACLE最大进程数
2013-08-28 17:00 1370客户端无法连接数据库,报错ORA-12537,此时登录EM后, ... -
[转]mysql中如何重命名数据库 转自运维人生http://opkeep.com
2013-06-24 11:19 859来源:http://opkeep.com/database/m ... -
64位Ubuntu 安装MySQL 5.5.32 错误记录与解决
2013-06-21 19:50 11061. dev.mysql.com/downloads 下载ta ... -
[转]mysql忘记root密码怎么办?重设Mysql密码的方法
2013-06-21 11:36 1165转自:http://it.oyksoft.com/ ... -
char类型补空格引发的案子
2013-06-17 10:24 1426不多说,都懂的: create table test( c ... -
ORA-28547: 连接服务器失败, 可能是 Oracle Net 管理错误
2013-06-14 15:37 1944问题描述:Navicat 10.0.10 Premium 连 ... -
[转]"ORA-22992: 无法使用从远程表选择的 LOB 定位器"解决方法
2013-06-09 11:06 2635转载自http://blog.csdn.net/weikaif ... -
Oracle通过EM查看具体SQL的执行计划和统计信息
2013-05-27 18:33 1310tableA.columnB上建索引 执行查询 select ... -
其他机器连不上本地infobright,报错'reading initial communication packet', system error: 0
2013-05-20 14:59 1918装好infobright之后,无法在其他机器连接本地ib(ro ... -
非正常关机;[ERROR 2002 (HY000);mysqld无法启动;innodb recovery失败
2013-05-17 16:24 1643os:ubuntu 11.10 db: mysql 旧5.1. ... -
windows oracle 11.2.0.1.0 dump blob 到 windows oracle 10.2.0.1.0
2013-05-17 12:02 794source_server expdp src_usr/pwd ... -
[转载]dg v.s. streams v.s. gg
2013-05-06 16:02 810Tom Said: As for setting up the ... -
解决Oracle TEMP临时表空间数据文件过大
2013-05-06 10:11 1791create temporary tablespace tem ... -
产品详情页面加载慢(之前约7s-12s)
2013-04-27 12:03 814问题场景:客户反应网站上的产品详情页面打开时,速度很慢。 运行 ... -
工作中遇到的SQL Server索引相关问题(过多、缺失、启用)
2013-04-27 11:07 2103直接上菜! 问题场景1 ... -
记一次MySQL死锁(对同一张表update和insert)的解决
2013-04-27 02:07 21077问题场景 每次节 ... -
万恶的隐式数据类型转换
2013-04-26 17:23 11542年前上线的系统了,运 ... -
oracle 11.2.0.1 result_cache
2013-04-25 04:27 784alter system set result_cache_m ... -
oracle 重启
2013-04-25 04:23 0重启em emctl stop dbconsole emctl ...
相关推荐
在Oracle数据库中,多行记录的合并通常是为了将相同字段的多行数据整合成一行,以便于数据分析或者简化展示。这种操作在报表制作、数据整理等场景中非常常见。本篇文章将详细介绍Oracle中实现多行记录合并的几种方法...
嵌套表是Oracle数据库中的一种复杂数据类型,允许在一个列中存储多个行。这份文档可能详细介绍了如何创建、操作和管理嵌套表,以及它们在处理复杂数据结构时的优势和注意事项。 5. **使用values of.txt** Oracle ...
- 主键和外键:主键用于唯一标识表中的每一行,外键用于建立表之间的引用关系。 - 唯一性约束:确保字段值的唯一性,可以提高查询性能和数据完整性。 - 索引:创建索引以加快查询速度,但需平衡查询性能和额外的...
它默认处理单行结果,如果查询结果只有一行,可以直接将数据赋值给变量。当查询完成,隐式游标会自动关闭。然而,如果查询返回多行,隐式游标无法直接处理,这时就需要使用显式游标。 2. **显式游标**:显式游标...
INSERT语句可以一次插入多行数据。UPDATE语句能够基于多个条件同时修改多个行的数据。DELETE语句能够根据单个条件从表中删除多行数据。在多条件操作中,如果需要基于多个条件进行数据插入或删除,可以使用嵌套的...
为解决这个问题,需要修改查询以确保只返回一行,或者使用其他数据存储结构来处理多行结果。 "ORA-01555"错误是"快照过旧",意味着在读取数据时,由于回滚段空间不足,无法获取到事务开始时的数据状态。这可能需要...
单行函数,正如其名,会对每一行数据执行一次,并返回一行结果。它们可以用于处理字符、数字和日期类型的数据,并可以嵌套使用。 字符函数在处理文本数据时非常有用。例如,`LOWER`函数将所有字母转换为小写,`...
#### 一、Oracle EBS 入门与概述 - **Oracle EBS (Enterprise Business Suite)**:是Oracle公司提供的一套完整的业务管理解决方案,适用于企业的财务管理、供应链管理、人力资源管理和客户服务等多个领域。 - **...
- INSERT INTO VALUES语句在一次执行中可以向表中添加多行数据,选项A是正确的。 以上内容基于提供的文档信息整理而成。由于文档内容有OCR扫描的不确定性,以上知识点可能需要在实际教材或官方文档中进一步核对以...
在传统的表格数据中,每一行代表一个记录,每一列代表一个属性。但在某些场景下,如比较不同时间段的数据或展示多维度信息,将行数据转换为列可以使得数据更直观、易读。 SQL中实现行转列的方法主要有以下几种: 1...
- **FETCH**: 从游标中获取一行数据。 - **CLOSE**: 关闭游标,释放资源。 - **PREPARE**: 预编译SQL语句,以提高执行效率。 - **EXECUTE**: 动态执行已预编译的SQL语句。 - **DESCRIBE**: 描述预编译的查询,...
题库中第27题的答案强调了dual表只能显示单行多列,不能显示多行多列,这是因为dual表本质上就是一行数据,用于特定的查询场景。 2. **常见题型与答案**:题库中列举了多道选择题的参考答案。例如第1题参考答案为A...
2. **换行处理**:根据特定的规则(如关键字后换行、函数参数间换行等)自动调整语句的换行位置,避免一行中出现过长的代码。 3. **括号对齐**:确保SQL语句中的括号(如WHERE条件、JOIN子句等)对齐,提高视觉效果...
每个表格称为关系,包含一系列字段(列)和记录(行)。关系数据库遵循一定的规则,如列数据类型一致,不允许字段重复,不允许多行内容完全相同,行列排列顺序无关紧要,字段必须是简单数据项而非组合数据项。此外,...
PL/SQL是Oracle数据库的一种编程语言,主要用于处理和操纵数据。它是SQL的扩展,增加了流程控制、异常处理和数据类型等功能,使得在数据库环境中编写复杂程序成为可能。 在PL/SQL块中,你可以直接嵌入SELECT、DML...
- 当使用`INTO`子句时,确保`SELECT`语句最多返回一行数据。 #### 操纵数据 - **使用VALUES子句插入数据**:最简单的插入方式是直接指定每个列的值。例如: ```sql INSERT INTO employees (employee_id, name) ...
以上是根据给定的文件信息整理的相关知识点,主要涵盖了 Oracle Database 12c SQL 考试中关于 SQL 语句的使用、外部表的特性以及 DML 语句的基础概念。这些知识点对于准备 1z0-071 考试的学生来说非常重要,能够帮助...
2. **换行处理**:插件可以自动在适当的地方插入换行,避免一行代码过长,提高代码可读性。 3. **括号风格**:根据设定,插件可以调整括号的位置,如K&R风格(每个操作符后跟一个括号)或Allman风格(每行一个括号...
2. **换行处理**:根据指定规则,将过长的语句适当地拆分成多行,避免一行代码过长导致阅读困难。 3. **括号对齐**:确保SQL语句中的括号(如`(`, `)`, `{`, `}`, `[`, `]`)对齐,增强代码的视觉美感。 4. **...