昨天在搞一个统计查询sql,纠结了3个小时,不过最后还是踩着前辈的肩膀,解决了问题。
select to_timestamp('2012-11-11 01:00:00.0','yyyy-mm-dd hh24:mi:ssxff') from dual;
背景:
订单项表 表里面有 门票类型 、 购买门票数量字段,以及订单头ID字段。
订单头表 与 订单项表是 一对多的关系。表里含有游玩日期和通关状态
游玩日期字段同一个门票类型也可以被买多次。
景区表 景区表和订单头表是多对多的关系
需求:
通过 达到如下结果:
景区名称 门票类型 数量 已通关 游玩日期
欢乐谷 成人 12 10 2011-01-30
欢乐谷2 儿童 9 0 2011-01-30
欢乐谷3 军人 20 10 2011-01-30
要求
只用一条sql实现,如上功能
实现过程:
SELECT
WMSYS.WM_CONCAT(distinct(P.PLACE_NAME)) AS placeName,
WMSYS.WM_CONCAT(distinct(O.TICKET_TYPE_NAME)) AS ticketTypName,
count(O.QUANTITY) AS ticketCounts,
count(decode(OH.STATUS,'已通关', 1)) AS alwaysCarnet,
WMSYS.WM_CONCAT(distinct(TO_CHAR(OH.VISIT_DATE, 'yyyy-mm-dd'))) AS visitDate,
FROM
PLACES P,ORDER_HEAD_PLACES OHP,ORDER_HEAD OH, ORDERS O
WHERE
OHP.PLACE_ID=P.PLACE_ID
AND P.PLACE_ID="某个景区的id"
AND OHP.ORDER_HEAD_ID=OH.ORDER_HEAD_ID
AND OH.ORDER_HEAD_ID=O.ORDER_HEAD_ID
AND TT.TICKET_TYPE_ID=O.TICKET_TYPE_ID
AND OH.VISIT_DATE=TO_DATE(游玩时间,'yyyy-mm-dd')
AND (OH.STATUS='已通关' OR OH.STATUS='未通关')
GROUP BY O.TICKET_TYPE --门票类型
说明:其实就是 关注一下oracle的
WMSYS.WM_CONCAT 和
decode 方法,好吧,到网上看看它们的用法,这里就不写了。没有啥技术含量,BUT!唯有努力。。。
INSTR(C1,C2,I,J)
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1
substr( string, start_position, [ length ] )
取子字符串,从start_position开始,取length个,length为可选,如果length为空则返回start_position后的所有字符。
declare @xml xml
set @xml='
<root>
<tag name="艾滋病">新闻1</tag>
<tag name="艾滋病">新闻2</tag>
<tag name="健康"></tag>
</root>'
SELECT @xml.query('/root/tag[@name="艾滋病"]/text()')
--result
--新闻1新闻2
分享到:
相关推荐
经典面试题目:有一个学生记录的表student,形式如下: <br> name class sex <br> 1 a 1(男) <br> 2 b 2(女) <br> 3 c 1 <br> 4 a 1 <br> 5 a 2 <br> 6 a 1 <br> …… <br> 现要统计每个班级的男女人数,结果如下: ...
55<br><br>0076 约瑟夫环问题 56<br><br>0077 猴子选大王 57<br><br>0078 如何判断IP是否正确 57<br><br>0079 如何将小写金额转换为大写金额 57<br><br>0080 统计文本字数 58<br><br>0081 文本中首字母改...
81<br>实例068 在ListView控件中对数据排序或统计 83<br>实例069 在ListView控件中绘制底纹 84<br>实例070 在列表视图中拖动视图项 85<br>实例071 用ListView控件选取整行数据 88<br>实例072 用ListView...
14.5<br>1.32<br><br>1.21<br><br>插入实体<br><br>(20次insert)<br>36.1<br>17.4<br>2.07<br><br>更新实体<br><br>(20次单条update)<br>23.5<br>15.9<br><br>SqlMap:20.3<br>1.48<br><br>1.16<br><br>查询结果集...
18.0<br>1.23<br><br>1.10<br><br>每秒插入实体<br><br>(20次insert)<br>41<br>21<br>1.95<br><br>更新实体<br><br>(20次单条update)<br>27<br>19<br><br>SqlMap:24<br>1.42<br><br>1.13<br><br>查询结果集(平均101...
学号.sql<br/>│ 开票统计--涉及到连号处理.sql<br/>│ 新编号查询示例(分类查询).sql<br/>│ 新编号查询示例.sql<br/>│ 日期流水号.sql<br/>│ 材料流水号.sql<br/>│ 流水号.sql<br/>│ 箱编号连号处理.sql<br/>...
<br><br>性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。<br>更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息...
另外,在显示结果的同时,SQL的执行计划和统计信息也被显示出来,这样您可以一边看着Oracle的内部优化算法,一边做出高效率的程序来.<br> Object Browser也支持托拽机能.对已经保存好的...
<br><br>性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。<br>更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息...
=、<>、!>、!<` - **范围**:`BETWEEN AND、NOT BETWEEN AND` - **集合**:`IN、NOT IN` - **字符匹配**:`LIKE、NOT LIKE` - **空值**:`IS NULL、IS NOT NULL` - **逻辑运算符**:`AND、OR、NOT` #### 六、聚集...
<br><br>性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。<br>更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息...
如何使用,请参照解压后的帮助文件 Help.html 【软件功能】 <1> 以表格的形式显示 Select SQL 语句的查询结果,可以直接对查询结果进行再操作,如修改、插入、删除、保存、多功能拷贝、导出、数字统计、行列移动、列...
<value>oracle.jdbc.driver.OracleDriver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>...
CREATE DIRECTORY <目录对象名> AS '<操作系统路径>'; ``` - **查看默认目录**:查询默认的目录对象,以便了解数据泵作业将把备份文件、日志文件和SQL文件存储在哪里。 ```sql SELECT * FROM DBA_DIRECTORIES...
<2>智能的SQL编辑器:自动弹出提示窗口,列出关键字、关键字组合、函数名、列名、对象 名、对象类型、参数、包内的过程和函数,提高SQL编辑效率。例如: (1)输入字串“sel”,一秒钟后列出以“sel”开头的所有...
Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二) ...
<1>将 SELECT 语句的查询结果显示在工作表,可以直接对查询结果进行再操作,如 修改、插入行、删除行、提 交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、将选择的单元格数据导出为 XLS /CSV /INSERT ...
Oracle的SQL优化与调优机制复杂多样,涵盖了从SQL语句的编写、执行计划的选择、到资源管理的全方位调优方法。为了深入理解Oracle SQL优化与调优机制,需要掌握以下几个核心知识点。 首先,要掌握Oracle SQL的基本...