<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_小光的自由天空</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/20845/rss</id><updated>2011-09-21T08:51:28Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/20845/rss"/><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/21/2184206.html</id><title type="text">单条SQL语句实现复杂逻辑几例(转)</title><summary type="text">1、按指定规则生成指定商品2002年销售额，其中彩电项值为2001年的销售额加2000年的销售额，微波炉为2000年销售额, 然后汇总彩电+微波炉的2002年总销售额。表数据如下：CITYPRODUCT YEARSALES-------------------- -----------------北京 彩电 1999 3000北京 彩电 2000 2500北京 彩电 2001 4500北京 微波炉 1999 800北京 微波炉 2000 7000北京 微波炉 2001 333北京 冰箱 1999 2323北京 冰箱 2000 1212北京 冰箱 2001 7676天津 彩电 1999 2121</summary><published>2011-09-21T08:48:00Z</published><updated>2011-09-21T08:48:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/21/2184206.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/21/2184206.html"/><content type="html">&lt;p&gt;1、按指定规则生成指定商品2002年销售额，其中彩电项值为2001年的销售额加2000年的销售额，微波炉为2000年销售额, 然后汇总彩电+微波炉的2002年总销售额。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;表数据如下：&lt;/strong&gt;&lt;br /&gt;CITY&amp;nbsp;&amp;nbsp;PRODUCT YEAR&amp;nbsp;&amp;nbsp;SALES&lt;br /&gt;------&amp;nbsp;&amp;nbsp;-------------- --------&amp;nbsp;&amp;nbsp;---------&lt;br /&gt;北京 彩电 1999 3000&lt;br /&gt;北京 彩电 2000 2500&lt;br /&gt;北京 彩电 2001 4500&lt;br /&gt;北京 微波炉 1999 800&lt;br /&gt;北京 微波炉 2000 7000&lt;br /&gt;北京 微波炉 2001 333&lt;br /&gt;北京 冰箱 1999 2323&lt;br /&gt;北京 冰箱 2000 1212&lt;br /&gt;北京 冰箱 2001 7676&lt;br /&gt;天津 彩电 1999 212121&lt;br /&gt;天津 彩电 2000 434343&lt;br /&gt;天津 彩电 2001 564566&lt;br /&gt;天津 微波炉 1999 23432&lt;br /&gt;天津 微波炉 2000 232&lt;br /&gt;天津 微波炉 2001 34234&lt;br /&gt;天津 冰箱 1999 324324&lt;br /&gt;天津 冰箱 2000 8987686&lt;br /&gt;天津 冰箱 2001 768678&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;要求用SQL实现如下效果：&lt;/strong&gt;&lt;br /&gt;CITY&amp;nbsp;&amp;nbsp;PRODUCT YEAR&amp;nbsp;&amp;nbsp;SALES&lt;br /&gt;------&amp;nbsp;&amp;nbsp;-------------- --------&amp;nbsp;&amp;nbsp;---------&lt;br /&gt;天津 微波炉 1999 23432&lt;br /&gt;天津 微波炉 2000 232&lt;br /&gt;天津 微波炉 2001 34234&lt;br /&gt;天津 微波炉 2002 232&lt;br /&gt;天津 冰箱 1999 324324&lt;br /&gt;天津 冰箱 2000 8987686&lt;br /&gt;天津 冰箱 2001 768678&lt;br /&gt;天津 彩电 1999 212121&lt;br /&gt;天津 彩电 2000 434343&lt;br /&gt;天津 彩电 2001 564566&lt;br /&gt;天津 彩电 2002 998909&lt;br /&gt;天津 彩电+微波炉 2002 999141&lt;br /&gt;北京 微波炉 1999 800&lt;br /&gt;北京 微波炉 2000 7000&lt;br /&gt;北京 微波炉 2001 333&lt;br /&gt;北京 微波炉 2002 7000&lt;br /&gt;北京 冰箱 1999 2323&lt;br /&gt;北京 冰箱 2000 1212&lt;br /&gt;北京 冰箱 2001 7676&lt;br /&gt;北京 彩电 1999 3000&lt;br /&gt;北京 彩电 2000 2500&lt;br /&gt;北京 彩电 2001 4500&lt;br /&gt;北京 彩电 2002 7000&lt;br /&gt;北京 彩电+微波炉 2002 14000&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;建表语句如下：&lt;/strong&gt;&lt;br /&gt;create table tmp1(CITY varchar2(20), PRODUCT varchar2(20), YEAR number,&amp;nbsp;&amp;nbsp;SALES number);&lt;br /&gt;insert into tmp1 values ('北京','彩电', 1999, 3000);&lt;br /&gt;insert into tmp1 values ('北京','彩电', 2000, 2500);&lt;br /&gt;insert into tmp1 values ('北京','彩电', 2001, 4500);&lt;br /&gt;insert into tmp1 values ('北京','微波炉', 1999, 800);&lt;br /&gt;insert into tmp1 values ('北京','微波炉', 2000, 7000);&lt;br /&gt;insert into tmp1 values ('北京','微波炉', 2001, 333);&lt;br /&gt;insert into tmp1 values ('北京','冰箱', 1999, 2323);&lt;br /&gt;insert into tmp1 values ('北京','冰箱', 2000, 1212);&lt;br /&gt;insert into tmp1 values ('北京','冰箱', 2001, 7676);&lt;br /&gt;insert into tmp1 values ('天津','彩电', 1999, 212121);&lt;br /&gt;insert into tmp1 values ('天津','彩电', 2000, 434343);&lt;br /&gt;insert into tmp1 values ('天津','彩电', 2001, 564566);&lt;br /&gt;insert into tmp1 values ('天津','微波炉', 1999, 23432);&lt;br /&gt;insert into tmp1 values ('天津','微波炉', 2000, 232);&lt;br /&gt;insert into tmp1 values ('天津','微波炉', 2001, 34234);&lt;br /&gt;insert into tmp1 values ('天津','冰箱', 1999, 324324);&lt;br /&gt;insert into tmp1 values ('天津','冰箱', 2000, 8987686);&lt;br /&gt;insert into tmp1 values ('天津','冰箱', 2001, 768678);&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;解题思路：&lt;/strong&gt;&lt;br /&gt;本题初看起来一般都会下意识选择通过group by rollup子句生成，但如果你选择直接通过group by rollup的方式：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select city, product, year, sum(sales)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp; from tmp1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;group by city, rollup(product, year)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;CITY&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;PRODUCT&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR SUM(SALES)&lt;br /&gt;-------------------- -------------------- ---------- ----------&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1212&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2323&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7676&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;11211&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2500&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4500&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;10000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;800&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;333&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8133&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;29344&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp; 8987686&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;324324&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;768678&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;10080688&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;434343&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;212121&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;564566&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1211030&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;232&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;23432&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;34234&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 57898&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;11349616&lt;br /&gt;&lt;br /&gt;26 rows selected&lt;br /&gt;--&lt;br /&gt;[/php]&lt;br /&gt;这跟预想的结果有不小差距。&lt;br /&gt;&lt;br /&gt;这是因为要求的数据是涉及逻辑运算的，比如某些数据需要2001年相加，某些数据由2000+2001汇总，因此我们在group by之前需要先按照条件对sales做些处理，彩电要取2000年和2001年的，而微波炉要取2000年的。&lt;br /&gt;&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select city,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;product,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;year,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;sales,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;decode(product,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; '彩电',&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; decode(year, 2000, sales, 2001, sales, 0),&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; '微波炉',&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; decode(year, 2000, sales, 0)) ns&lt;br /&gt;&amp;nbsp; &amp;nbsp; 10&amp;nbsp; &amp;nbsp; from tmp1;&lt;br /&gt;&lt;br /&gt;CITY&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;PRODUCT&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;SALES&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;NS&lt;br /&gt;-------------------- -------------------- ---------- ---------- ----------&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2500&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2500&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4500&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4500&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;800&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;333&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2323 &lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1212 &lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7676 &lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;212121&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;434343&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;434343&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;564566&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;564566&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;23432&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;232&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;232&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;34234&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;324324 &lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp; 8987686 &lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;768678 &lt;br /&gt;&lt;br /&gt;18 rows selected&lt;br /&gt;--&lt;br /&gt;[/php]&lt;br /&gt;&lt;br /&gt;然后在做sum的时候，我们只需要判断一下，比如产品为彩电或微波炉的话，sum(ns)，否则sum(sales)，最后按照城市产品和年份排下序即可：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select city,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;nvl(product, '彩电+微波炉') product,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;nvl(year, 2002) year,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;decode(product,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; '彩电',&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; nvl2(year, sum(sales), sum(ns)),&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; '微波炉',&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; nvl2(year, sum(sales), sum(ns)),&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; null,&lt;br /&gt;&amp;nbsp; &amp;nbsp; 10&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; sum(ns),&lt;br /&gt;&amp;nbsp; &amp;nbsp; 11&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; sum(sales)) sales&lt;br /&gt;&amp;nbsp; &amp;nbsp; 12&amp;nbsp; &amp;nbsp; from (select city,&lt;br /&gt;&amp;nbsp; &amp;nbsp; 13&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;product,&lt;br /&gt;&amp;nbsp; &amp;nbsp; 14&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;year,&lt;br /&gt;&amp;nbsp; &amp;nbsp; 15&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;sales,&lt;br /&gt;&amp;nbsp; &amp;nbsp; 16&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;decode(product,&lt;br /&gt;&amp;nbsp; &amp;nbsp; 17&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;'彩电',&lt;br /&gt;&amp;nbsp; &amp;nbsp; 18&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;decode(year, 2000, sales, 2001, sales, 0),&lt;br /&gt;&amp;nbsp; &amp;nbsp; 19&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;'微波炉',&lt;br /&gt;&amp;nbsp; &amp;nbsp; 20&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;decode(year, 2000, sales, 0)) ns&lt;br /&gt;&amp;nbsp; &amp;nbsp; 21&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;from tmp1) a&lt;br /&gt;&amp;nbsp; &amp;nbsp; 22&amp;nbsp; &amp;nbsp;group by city, rollup(product, year)&lt;br /&gt;&amp;nbsp; &amp;nbsp; 23&amp;nbsp;&amp;nbsp;having sum(ns) is not null or year is not null&lt;br /&gt;&amp;nbsp; &amp;nbsp; 24&amp;nbsp; &amp;nbsp;order by 1, 2, 3;&lt;br /&gt;&lt;br /&gt;CITY&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;PRODUCT&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;SALES&lt;br /&gt;-------------------- -------------------- ---------- ----------&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2323&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1212&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7676&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2500&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4500&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2002&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电+微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2002&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;14000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;800&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;333&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2002&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7000&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;324324&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp; 8987686&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;768678&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;212121&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;434343&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;564566&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2002&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;998909&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电+微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2002&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;999141&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;23432&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;232&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;34234&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2002&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;232&lt;br /&gt;&lt;br /&gt;24 rows selected&lt;br /&gt;--&lt;br /&gt;[/php]&lt;br /&gt;&lt;br /&gt;上述实现从技术角度看并不太难，所使用的函数、语法也都比较常见，只是由于业务需求涉及了一些逻辑，因此在实现的时候不少代码都用在了逻辑判断上，这样就造成了代码过长，同时也降低了可读性。&lt;br /&gt;&lt;br /&gt;下面再介绍一种更简单也更高效的实现方式，借助model和partition，可以直接指定计算规则：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select * from TMP1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;MODEL&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;PARTITION BY (city) DIMENSION BY (product, year)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;MEASURES (sales sal)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;RULES&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;(sal['彩电', 2002] = sal['彩电', 2001] + sal['彩电', 2000],&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp;&amp;nbsp;sal['微波炉', 2002] = sal['微波炉', 2000],&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp;&amp;nbsp;sal['彩电+微波炉', 2002] = (sal['彩电',2002]+sal['微波炉',2002]))&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;9&amp;nbsp;&amp;nbsp;ORDER BY 1,2,3&lt;br /&gt;&amp;nbsp; &amp;nbsp; 10&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;CITY&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;PRODUCT&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;SAL&lt;br /&gt;-------------------- -------------------- ---------- ----------&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2323&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1212&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7676&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2500&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4500&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2002&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电+微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2002&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;14000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;800&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7000&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;333&lt;br /&gt;北京&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2002&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7000&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;324324&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp; 8987686&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;冰箱&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;768678&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;212121&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;434343&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;564566&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2002&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;998909&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;彩电+微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2002&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;999141&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1999&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;23432&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;232&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;34234&lt;br /&gt;天津&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;微波炉&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2002&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;232&lt;br /&gt;&lt;br /&gt;24 rows selected&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2、查询字段a的值连续三条以上相同的记录&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;初始表数据如下：&lt;/strong&gt;&lt;br /&gt;a b c&lt;br /&gt;- - -&lt;br /&gt;1 2 3&lt;br /&gt;1 4 5&lt;br /&gt;1 3 6&lt;br /&gt;2 3 3&lt;br /&gt;1 5 7&lt;br /&gt;2 5 8&lt;br /&gt;1 6 9&lt;br /&gt;1 2 3&lt;br /&gt;1 4 5&lt;br /&gt;1 3 6&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;要求用SQL实现如下效果：&lt;/strong&gt;&lt;br /&gt;a b c&lt;br /&gt;- - -&lt;br /&gt;1 2 3&lt;br /&gt;1 4 5&lt;br /&gt;1 3 6&lt;br /&gt;1 6 9&lt;br /&gt;1 2 3&lt;br /&gt;1 4 5&lt;br /&gt;1 3 6&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;建表语句如下：&lt;/strong&gt;&lt;br /&gt;create table tmp2 (a number,b number, c number);&lt;br /&gt;insert into tmp2 values (1,2,3);&lt;br /&gt;insert into tmp2 values (1,4,5);&lt;br /&gt;insert into tmp2 values (1,3,6);&lt;br /&gt;insert into tmp2 values (2,3,3);&lt;br /&gt;insert into tmp2 values (1,5,7);&lt;br /&gt;insert into tmp2 values (2,5,8);&lt;br /&gt;insert into tmp2 values (1,6,9);&lt;br /&gt;insert into tmp2 values (1,2,3);&lt;br /&gt;insert into tmp2 values (1,4,5);&lt;br /&gt;insert into tmp2 values (1,3,6);&lt;br /&gt;commit;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;解题思路：&lt;/strong&gt;&lt;br /&gt;这道题看起来非常简单，我们甚至一眼就能看出来哪些记录是连接3条相同的，但千万不要被其简单的表象迷惑了，特别是那些下意识就能得出结论的问题，这往往会让我们的思维陷入到自我的思维误区中，而不再以计算机的执行模式去理解问题，因此这题核心要解决的问题就是将我们的思维方式转换成sql可以理解的记数方式。&lt;br /&gt;先来理一理我们的逻辑，看看能否转换成对应的SQL操作：&lt;br /&gt;&lt;br /&gt;首先肯定是拿上一条与下一条做对比，看看是否相同---&amp;gt;lead,lag分析函数可以实现这一点&lt;br /&gt;计算相同数---&amp;gt;count分析函数可以实现，但是这里面有一个问题，分析函数虽然是逐条对比生成结果，但此处我们的依据是是否相同的字段值，假设该字段值为0或1的话，count() over(partition by )就没有了依照，因此我们需要先将比较的结果字段通过sum() over(order by rownum)计算相加，以便生成分区用的字段。&lt;br /&gt;如果计数&amp;gt;3则这些记录符合我们的需求&lt;br /&gt;&lt;br /&gt;OK，思路理清了，下面一步步来试试，首先生成比较是否相同的字段：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select a.*,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;rownum rn,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;decode(a, lag(a, 1, a) over(order by rownum), 0, 1) na&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp; from tmp2 a&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; B&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; C&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;RN&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;NA&lt;br /&gt;---------- ---------- ---------- ---------- ----------&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;10&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&lt;br /&gt;10 rows selected&lt;br /&gt;--&lt;br /&gt;[/php]&lt;br /&gt;*rownum列是为了排序用&lt;br /&gt;&lt;br /&gt;然后生成用于partition的列&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select b.*, sum(na) over(order by rn) so&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp; from (select a.*,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;rownum rn,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;decode(a, lag(a, 1, a) over(order by rownum), 0, 1) na&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;from tmp2 a) b&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; B&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; C&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;RN&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;NA&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;SO&lt;br /&gt;---------- ---------- ---------- ---------- ---------- ----------&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;10&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&lt;br /&gt;&lt;br /&gt;10 rows selected&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;[/php]&lt;br /&gt;&lt;br /&gt;这下就清晰多了，剩下的就没难度了，count() over()生成数量，取数量大于2的记录即可：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select a,b,c from(&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;select c.*, count(so) over(partition by so) ct&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp; from (select b.*, sum(na) over(order by rn) so&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;from (select a.*,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; rownum rn,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; decode(a, lag(a, 1, a) over(order by rownum), 0, 1) na&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;from tmp2 a) b) c&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp;&amp;nbsp;)where ct&amp;gt;=3&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;9&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; B&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; C&lt;br /&gt;---------- ---------- ----------&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 9&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 5&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 6&lt;br /&gt;&lt;br /&gt;7 rows selected&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3、查询员工ID：1000的实际工作月数，注意过滤兼职月份&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;记录集如下：&lt;/strong&gt;&lt;br /&gt;ID&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STATION&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; START_DATE&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; END_DATE&lt;br /&gt;------ -----------&amp;nbsp; &amp;nbsp; -------------------&amp;nbsp; &amp;nbsp;----------------&lt;br /&gt;1000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 开发&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000-01-01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000-04-01&lt;br /&gt;1000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 测试&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000-07-01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000-10-01&lt;br /&gt;1000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 副经理&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2001-01-01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2001-04-01&lt;br /&gt;1000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DBA&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000-02-01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000-03-01&lt;br /&gt;1000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 兼职经理&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000-03-01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000-08-01&lt;br /&gt;1000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 经理&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2001-05-01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2001-08-01&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;该员工的实际工作月份应为：15&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;建表语句如下：&lt;/strong&gt;&lt;br /&gt;create table tmp3 (id number,station varchar2(20),start_date date,end_date date);&lt;br /&gt;insert into tmp3 (ID, STATION, START_DATE, END_DATE)&lt;br /&gt;values ('1000', '开发', to_date('01-01-2000', 'dd-mm-yyyy'), to_date('01-04-2000', 'dd-mm-yyyy'));&lt;br /&gt;insert into tmp3 (ID, STATION, START_DATE, END_DATE)&lt;br /&gt;values ('1000', '测试', to_date('01-07-2000', 'dd-mm-yyyy'), to_date('01-10-2000', 'dd-mm-yyyy'));&lt;br /&gt;insert into tmp3 (ID, STATION, START_DATE, END_DATE)&lt;br /&gt;values ('1000', '副经理', to_date('01-01-2001', 'dd-mm-yyyy'), to_date('01-04-2001', 'dd-mm-yyyy'));&lt;br /&gt;insert into tmp3 (ID, STATION, START_DATE, END_DATE)&lt;br /&gt;values ('1000', 'DBA', to_date('01-02-2000', 'dd-mm-yyyy'), to_date('01-03-2000', 'dd-mm-yyyy'));&lt;br /&gt;insert into tmp3 (ID, STATION, START_DATE, END_DATE)&lt;br /&gt;values ('1000', '兼职经理', to_date('01-03-2000', 'dd-mm-yyyy'), to_date('01-08-2000', 'dd-mm-yyyy'));&lt;br /&gt;insert into tmp3 (ID, STATION, START_DATE, END_DATE)&lt;br /&gt;values ('1000', '经理', to_date('01-05-2001', 'dd-mm-yyyy'), to_date('01-08-2001', 'dd-mm-yyyy'));&lt;br /&gt;commit;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;解题思路：&lt;/strong&gt;&lt;br /&gt;这道题核心的问题在于在岗时间可能存在兼职的情况，因此要求实际工作月份的话就不能单纯sum(end_date-start_date)，如果说你一心想着比较各条记录的start_date,end_date，判断是否存在兼职月的话，黑黑，我不是说这样实现不了，只是。。。。太复杂了！！不妨换一种思路，我们只要遍历出它所有工作过的月份，然后count(distinct date)就是实际工作月份了。&lt;br /&gt;要求出所有工作过的月份，就必须首先构造出足够数据的记录出来，这并不困难，熟悉connect by的朋友一定不陌生这种写法：select level from dual connect by rownum&amp;lt;=n;这里我们也借助这种方式来构造指定数据的记录集：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select level - 1 lv&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp; from dual&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;connect by rownum &amp;lt;=&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; (select max(Months_between(end_date, start_date)) mb from test)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;LV&lt;br /&gt;----------&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;3&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;4&lt;br /&gt;--&lt;br /&gt;[/php]&lt;br /&gt;*Level为什么要-1呢，因为我们准备用add_months函数来生成日期，起始月数量当然得是0啊&lt;br /&gt;&lt;br /&gt;然后与tmp3表做Cartesian，即能够生成比我们希望数量还要多的结果集(多不怕，别少就行啊)：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select a.*,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Months_between(end_date, start_date) mb,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;b.lv,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;add_months(a.start_date, lv) am&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp; from tmp3 a,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;(select level - 1 lv&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;from dual&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; connect by rownum &amp;lt;= (select max(Months_between(end_date, start_date)) mb&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; from test t)) b&lt;br /&gt;&amp;nbsp; &amp;nbsp; 10&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;ID STATION&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;START_DATE&amp;nbsp;&amp;nbsp;END_DATE&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;MB&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;LV AM&lt;br /&gt;---------- -------------------- ----------- ----------- ---------- ---------- -----------&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 开发&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-01-01&amp;nbsp;&amp;nbsp;2000-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0 2000-01-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 测试&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-07-01&amp;nbsp;&amp;nbsp;2000-10-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0 2000-07-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 副经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001-01-01&amp;nbsp;&amp;nbsp;2001-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0 2001-01-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 DBA&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000-02-01&amp;nbsp;&amp;nbsp;2000-03-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0 2000-02-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 兼职经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2000-03-01&amp;nbsp;&amp;nbsp;2000-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0 2000-03-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001-05-01&amp;nbsp;&amp;nbsp;2001-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0 2001-05-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 开发&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-01-01&amp;nbsp;&amp;nbsp;2000-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1 2000-02-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 测试&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-07-01&amp;nbsp;&amp;nbsp;2000-10-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1 2000-08-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 副经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001-01-01&amp;nbsp;&amp;nbsp;2001-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1 2001-02-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 DBA&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000-02-01&amp;nbsp;&amp;nbsp;2000-03-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1 2000-03-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 兼职经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2000-03-01&amp;nbsp;&amp;nbsp;2000-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1 2000-04-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001-05-01&amp;nbsp;&amp;nbsp;2001-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1 2001-06-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 开发&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-01-01&amp;nbsp;&amp;nbsp;2000-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2 2000-03-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 测试&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-07-01&amp;nbsp;&amp;nbsp;2000-10-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2 2000-09-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 副经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001-01-01&amp;nbsp;&amp;nbsp;2001-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2 2001-03-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 DBA&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000-02-01&amp;nbsp;&amp;nbsp;2000-03-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2 2000-04-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 兼职经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2000-03-01&amp;nbsp;&amp;nbsp;2000-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2 2000-05-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001-05-01&amp;nbsp;&amp;nbsp;2001-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2 2001-07-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 开发&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-01-01&amp;nbsp;&amp;nbsp;2000-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3 2000-04-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 测试&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-07-01&amp;nbsp;&amp;nbsp;2000-10-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3 2000-10-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 副经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001-01-01&amp;nbsp;&amp;nbsp;2001-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3 2001-04-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 DBA&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000-02-01&amp;nbsp;&amp;nbsp;2000-03-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3 2000-05-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 兼职经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2000-03-01&amp;nbsp;&amp;nbsp;2000-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3 2000-06-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001-05-01&amp;nbsp;&amp;nbsp;2001-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3 2001-08-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 开发&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-01-01&amp;nbsp;&amp;nbsp;2000-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4 2000-05-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 测试&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2000-07-01&amp;nbsp;&amp;nbsp;2000-10-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4 2000-11-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 副经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2001-01-01&amp;nbsp;&amp;nbsp;2001-04-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4 2001-05-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 DBA&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2000-02-01&amp;nbsp;&amp;nbsp;2000-03-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4 2000-06-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 兼职经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2000-03-01&amp;nbsp;&amp;nbsp;2000-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4 2000-07-01&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1000 经理&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2001-05-01&amp;nbsp;&amp;nbsp;2001-08-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 4 2001-09-01&lt;br /&gt;&lt;br /&gt;30 rows selected&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;[/php]&lt;br /&gt;剩下的工作就简单了，去除无效记录，再去重取数量即可：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select count(unique am)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp; from (select Months_between(end_date, start_date) mb,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;b.lv,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;add_months(a.start_date, lv) am&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;from tmp3 a,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;(select level - 1 lv&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;from dual&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;connect by rownum &amp;lt;=&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;(select max(Months_between(end_date, start_date)) mb&lt;br /&gt;&amp;nbsp; &amp;nbsp; 10&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;from test t)) b) c&lt;br /&gt;&amp;nbsp; &amp;nbsp; 11&amp;nbsp; &amp;nbsp;where c.mb &amp;gt; lv&lt;br /&gt;&amp;nbsp; &amp;nbsp; 12&amp;nbsp; &amp;nbsp;order by am;&lt;br /&gt;&lt;br /&gt;COUNT(UNIQUEAM)&lt;br /&gt;---------------&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 15&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;4、将列值为0的列替换为距离它最近列的非0值&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;记录集如下：&lt;/strong&gt;&lt;br /&gt;ADDDATE&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ADDVALUE&lt;br /&gt;--------------&amp;nbsp; &amp;nbsp;---------------&lt;br /&gt;2007-03-01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;2007-03-02&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;2007-03-05&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.64&lt;br /&gt;2007-03-06&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.82&lt;br /&gt;2007-03-07&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;2007-03-08&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.47&lt;br /&gt;2007-03-09&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;2007-03-12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;2007-03-13&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.01&lt;br /&gt;2007-03-14&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.21&lt;br /&gt;2007-03-15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.12&lt;br /&gt;2007-03-16&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;2007-03-17&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;用SQL实现如下效果：&lt;/strong&gt;&lt;br /&gt;ADDDATE&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ADDVALUE&lt;br /&gt;--------------&amp;nbsp; &amp;nbsp;---------------&lt;br /&gt;2007-03-01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.64&lt;br /&gt;2007-03-02&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.64&lt;br /&gt;2007-03-05&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.64&lt;br /&gt;2007-03-06&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.82&lt;br /&gt;2007-03-07&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.47&lt;br /&gt;2007-03-08&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.47&lt;br /&gt;2007-03-09&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.01&lt;br /&gt;2007-03-12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.01&lt;br /&gt;2007-03-13&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.01&lt;br /&gt;2007-03-14&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.21&lt;br /&gt;2007-03-15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.12&lt;br /&gt;2007-03-16&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;2007-03-17&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;建表语句如下：&lt;/strong&gt;&lt;br /&gt;create table tmp4 (adddate varchar2(20),addvalue number);&lt;br /&gt;insert into tmp4 values ('2007-03-01',0);&lt;br /&gt;insert into tmp4 values ('2007-03-02',0);&lt;br /&gt;insert into tmp4 values ('2007-03-05',3.64);&lt;br /&gt;insert into tmp4 values ('2007-03-06',3.82);&lt;br /&gt;insert into tmp4 values ('2007-03-07',0);&lt;br /&gt;insert into tmp4 values ('2007-03-08',3.47);&lt;br /&gt;insert into tmp4 values ('2007-03-09',0);&lt;br /&gt;insert into tmp4 values ('2007-03-12',0);&lt;br /&gt;insert into tmp4 values ('2007-03-13',4.01);&lt;br /&gt;insert into tmp4 values ('2007-03-14',4.21);&lt;br /&gt;insert into tmp4 values ('2007-03-15',4.12);&lt;br /&gt;insert into tmp4 values ('2007-03-16',0);&lt;br /&gt;insert into tmp4 values ('2007-03-17',0);&lt;br /&gt;Commit;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;解题思路：&lt;/strong&gt;&lt;br /&gt;别想歪了，这道题用lead,lag之类分析函数是不行地，费事又不讨好，最简单的方式，如果不考虑执行效率的话，可以这样：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select a.adddate,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;decode(a.addvalue,0, nvl((select b.addvalue&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;from tmp4 b&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;where b.adddate &amp;gt; a.adddate&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; and b.addvalue != 0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; and rownum = 1),0),a.addvalue) addvalue&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp; &amp;nbsp; from tmp4 a&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;ADDDATE&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;ADDVALUE&lt;br /&gt;-------------------- ----------&lt;br /&gt;2007-03-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.64&lt;br /&gt;2007-03-02&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.64&lt;br /&gt;2007-03-05&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.64&lt;br /&gt;2007-03-06&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.82&lt;br /&gt;2007-03-07&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.47&lt;br /&gt;2007-03-08&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.47&lt;br /&gt;2007-03-09&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.01&lt;br /&gt;2007-03-12&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.01&lt;br /&gt;2007-03-13&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.01&lt;br /&gt;2007-03-14&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.21&lt;br /&gt;2007-03-15&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.12&lt;br /&gt;2007-03-16&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;2007-03-17&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;--&lt;br /&gt;[/php]&lt;br /&gt;&lt;br /&gt;正如前文所说，这种方式效率实在堪忧，尤其是当tmp4记录量较大时，毕竟count(0)+1次tmp4表的扫描所花代价较大。&lt;br /&gt;我们知道，上述形式的语句通常都是可以转换成连接查询的，因此，稍做转换：&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select ad1, decode(cw, 1, av1, 2, av2, 3, av1) adv&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp; &amp;nbsp; from (select c.*, row_number() over(partition by ad1 order by ad2) rn&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;from (select a.adddate ad1,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; a.addvalue av1,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; b.adddate ad2,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; b.addvalue av2,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; case&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;when a.addvalue != 0 then&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; 10&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;when b.adddate &amp;gt; a.adddate and a.addvalue = 0 then&lt;br /&gt;&amp;nbsp; &amp;nbsp; 11&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2&lt;br /&gt;&amp;nbsp; &amp;nbsp; 12&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;when b.adddate is null and a.addvalue = 0 then&lt;br /&gt;&amp;nbsp; &amp;nbsp; 13&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 3&lt;br /&gt;&amp;nbsp; &amp;nbsp; 14&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;br /&gt;&amp;nbsp; &amp;nbsp; 15&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp; 16&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; end as cw&lt;br /&gt;&amp;nbsp; &amp;nbsp; 17&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;from tmp4 a, tmp4 b&lt;br /&gt;&amp;nbsp; &amp;nbsp; 18&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; where b.addvalue(+) != 0&lt;br /&gt;&amp;nbsp; &amp;nbsp; 19&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; and b.adddate(+)&amp;gt;a.adddate&lt;br /&gt;&amp;nbsp; &amp;nbsp; 20&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; order by a.adddate) c&lt;br /&gt;&amp;nbsp; &amp;nbsp; 21&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;where cw != 0)&lt;br /&gt;&amp;nbsp; &amp;nbsp; 22&amp;nbsp; &amp;nbsp;where rn = 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; 23&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;AD1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; ADV&lt;br /&gt;-------------------- ----------&lt;br /&gt;2007-03-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.64&lt;br /&gt;2007-03-02&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.64&lt;br /&gt;2007-03-05&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.64&lt;br /&gt;2007-03-06&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.82&lt;br /&gt;2007-03-07&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.47&lt;br /&gt;2007-03-08&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.47&lt;br /&gt;2007-03-09&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.01&lt;br /&gt;2007-03-12&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.01&lt;br /&gt;2007-03-13&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.01&lt;br /&gt;2007-03-14&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.21&lt;br /&gt;2007-03-15&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.12&lt;br /&gt;2007-03-16&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;2007-03-17&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;[/php]&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;稍加一点难度，如果希望的结果集是这样，又该怎么样实现呢：&lt;/strong&gt;&lt;br /&gt;ADDDATE&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ADDVALUE&lt;br /&gt;--------------&amp;nbsp; &amp;nbsp;---------------&lt;br /&gt;2007-03-01&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.64&lt;br /&gt;2007-03-02&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.64&lt;br /&gt;2007-03-05&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.64&lt;br /&gt;2007-03-06&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.82&lt;br /&gt;2007-03-07&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.47&lt;br /&gt;2007-03-08&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.47&lt;br /&gt;2007-03-09&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.01&lt;br /&gt;2007-03-12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.01&lt;br /&gt;2007-03-13&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.01&lt;br /&gt;2007-03-14&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.21&lt;br /&gt;2007-03-15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.12&lt;br /&gt;2007-03-16&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.12&lt;br /&gt;2007-03-17&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.12&lt;br /&gt;&lt;br /&gt;并不困难，只要对我们的sql稍加改动即可&lt;br /&gt;[php]&lt;br /&gt;JSSWEB&amp;gt; select ad1,nav from(&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;select c.*,row_number() over(partition by ad1 order by ad2) rn from (&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;select a.adddate ad1,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;a.addvalue av1,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;b.adddate ad2,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;b.addvalue av2,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;case&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;when a.addvalue != 0 then&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;a.addvalue&lt;br /&gt;&amp;nbsp; &amp;nbsp; 10&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;when a.addvalue = 0 and b.adddate &amp;gt; a.adddate then&lt;br /&gt;&amp;nbsp; &amp;nbsp; 11&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;b.addvalue&lt;br /&gt;&amp;nbsp; &amp;nbsp; 12&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;when a.addvalue = 0 and b.adddate is null then&lt;br /&gt;&amp;nbsp; &amp;nbsp; 13&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;first_value(b.addvalue) over(order by b.adddate desc nulls last)&lt;br /&gt;&amp;nbsp; &amp;nbsp; 14&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp; &amp;nbsp; 15&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; 16&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;end nav&lt;br /&gt;&amp;nbsp; &amp;nbsp; 17&amp;nbsp; &amp;nbsp; from tmp4 a, tmp4 b&lt;br /&gt;&amp;nbsp; &amp;nbsp; 18&amp;nbsp; &amp;nbsp;where b.addvalue(+) != 0&lt;br /&gt;&amp;nbsp; &amp;nbsp; 19&amp;nbsp; &amp;nbsp;and b.adddate(+)&amp;gt;a.adddate&lt;br /&gt;&amp;nbsp; &amp;nbsp; 20&amp;nbsp; &amp;nbsp;order by 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; 21&amp;nbsp;&amp;nbsp;) c where nav!=0)where rn=1&lt;br /&gt;&amp;nbsp; &amp;nbsp; 22&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;AD1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; NAV&lt;br /&gt;-------------------- ----------&lt;br /&gt;2007-03-01&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.64&lt;br /&gt;2007-03-02&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.64&lt;br /&gt;2007-03-05&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.64&lt;br /&gt;2007-03-06&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.82&lt;br /&gt;2007-03-07&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.47&lt;br /&gt;2007-03-08&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;3.47&lt;br /&gt;2007-03-09&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.01&lt;br /&gt;2007-03-12&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.01&lt;br /&gt;2007-03-13&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.01&lt;br /&gt;2007-03-14&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.21&lt;br /&gt;2007-03-15&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.12&lt;br /&gt;2007-03-16&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.12&lt;br /&gt;2007-03-17&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;4.12&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.itpub.net/forum.php?mod=viewthread&amp;amp;tid=970868&amp;amp;extra=pageD1%3D&amp;amp;page=1"&gt;http://www.itpub.net/forum.php?mod=viewthread&amp;amp;tid=970868&amp;amp;extra=pageD1%3D&amp;amp;page=1&lt;/a&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/Monday/aggbug/2184206.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/21/2184206.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/13/2174786.html</id><title type="text">Statspack之十四-&amp;quot;log file sync&amp;quot; 等待事件（转贴）</title><summary type="text">当一个用户提交(commits)或者回滚(rollback),session的redo信息需要写出到redo logfile中.用户进程将通知LGWR执行写出操作,LGWR完成任务以后会通知用户进程.这个等待事件就是指用户进程等待LGWR的写完成通知.对于回滚操作，该事件记录从用户发出rollback命令到回滚完成的时间.如果该等待过多，可能说明LGWR的写出效率低下，或者系统提交过于频繁.针对该问题，可以关注:log file parallel write等待事件user commits,user rollback等统计信息可以用于观察提交或回滚次数解决方案:1.提高LGWR性能尽量使用快速</summary><published>2011-09-13T07:33:00Z</published><updated>2011-09-13T07:33:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/13/2174786.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/13/2174786.html"/><content type="html">&lt;p  align="left"&gt;当一个用户提交(commits)或者回滚(rollback),session的redo信息需要写出到redo logfile中.&lt;br /&gt;用户进程将通知LGWR执行写出操作,LGWR完成任务以后会通知用户进程.&lt;br /&gt;这个等待事件就是指用户进程等待LGWR的写完成通知.&lt;/p&gt;&#xD;
&lt;p  align="left"&gt;对于回滚操作，该事件记录从用户发出rollback命令到回滚完成的时间.&lt;/p&gt;&#xD;
&lt;p  align="left"&gt;如果该等待过多，可能说明LGWR的写出效率低下，或者系统提交过于频繁.&lt;br /&gt;针对该问题，可以关注:&lt;br /&gt;log file parallel write等待事件&lt;br /&gt;user commits,user rollback等统计信息可以用于观察提交或回滚次数&lt;/p&gt;&#xD;
&lt;p  align="left"&gt;解决方案:&lt;br /&gt;1.提高LGWR性能&lt;br /&gt;尽量使用快速磁盘，不要把redo log file存放在raid 5的磁盘上&lt;br /&gt;2.使用批量提交&lt;br /&gt;3.适当使用NOLOGGING/UNRECOVERABLE等选项&lt;/p&gt;&#xD;
&lt;p  align="left"&gt;可以通过如下公式计算平均redo写大小：&lt;/p&gt;&#xD;
&lt;div  align="left"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;avg.redo write size = (Redo block written/redo writes)*512 bytes&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果系统产生redo很多，而每次写的较少，一般说明LGWR被过于频繁的激活了.&lt;br /&gt;可能导致过多的redo相关latch的竞争,而且Oracle可能无法有效的使用piggyback的功能.&lt;/p&gt;&#xD;
&lt;p&gt;我们从一个statspack中提取一些数据来研究一下这个问题.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1.主要信息&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="729" bgcolor="#999999"&gt;&lt;span &gt;&lt;pre&gt;DB Name         DB Id    Instance     Inst Num Release     OPS Host&#xD;
------------ ----------- ------------ -------- ----------- --- ------------&#xD;
DB           1222010599  oracle              1 8.1.7.4.5   NO  sun&#xD;
                Snap Id     Snap Time      Sessions&#xD;
                ------- ------------------ --------&#xD;
 Begin Snap:       3473 13-Oct-04 13:43:00      540&#xD;
   End Snap:       3475 13-Oct-04 14:07:28      540&#xD;
    Elapsed:                  24.47 (mins)&#xD;
&#xD;
Cache Sizes&#xD;
~~~~~~~~~~~&#xD;
           db_block_buffers:     102400          log_buffer:   20971520&#xD;
              db_block_size:       8192    shared_pool_size:       600M&#xD;
&#xD;
Load Profile&#xD;
~~~~~~~~~~~~                            Per Second       Per Transaction&#xD;
                                   ---------------       ---------------&#xD;
                  Redo size:             28,458.11              2,852.03&#xD;
                  ......&#xD;
                          &lt;/pre&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.等待事件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="736"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;Event                               Waits   Timeouts  Time (cs)    (ms)   /txn&#xD;
---------------------------- ------------ ---------- ----------- ------ ------&#xD;
&lt;em&gt;log file sync                      14,466          2       4,150      3    1.0&lt;/em&gt;&#xD;
db file sequential read            17,202          0       2,869      2    1.2&#xD;
latch free                         24,841     13,489       2,072      1    1.7 &#xD;
direct path write                     121          0       1,455    120    0.0&#xD;
db file parallel write              1,314          0       1,383     11    0.1&#xD;
&lt;em&gt;log file sequential read            1,540          0          63      0    0.1&#xD;
....&#xD;
log file switch completion              1          0           3     30    0.0&lt;/em&gt;&#xD;
refresh controlfile command            23          0           1      0    0.0&#xD;
LGWR wait for redo copy                46          0           0      0    0.0&#xD;
....&#xD;
&lt;em&gt;log file single write                   4          0           0      0    0.0&lt;/em&gt;&#xD;
       &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;我们看到，这里log file sync和db file parallel write等待同时出现了.&lt;br /&gt;显然log file sync在等待db file parallel write的完成.&lt;/p&gt;&#xD;
&lt;p&gt;这里磁盘IO肯定存在了瓶颈，实际用户的redo和数据文件同时存放在Raid的磁盘上，存在性能问题.&lt;br /&gt;需要调整.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.统计信息&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="692"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;Statistic                                    Total   per Second    per Trans&#xD;
--------------------------------- ---------------- ------------ ------------&#xD;
....&#xD;
redo blocks written                         93,853         63.9          6.4&#xD;
redo buffer allocation retries                   1          0.0          0.0&#xD;
redo entries                               135,837         92.5          9.3&#xD;
redo log space requests                          1          0.0          0.0&#xD;
redo log space wait time                         3          0.0          0.0&#xD;
redo ordering marks                              0          0.0          0.0&#xD;
redo size                               41,776,508     28,458.1      2,852.0&#xD;
redo synch time                              4,174          2.8          0.3&#xD;
redo synch writes                           14,198          9.7          1.0&#xD;
redo wastage                             4,769,200      3,248.8        325.6&#xD;
redo write time                              3,698          2.5          0.3&#xD;
redo writer latching time                        0          0.0          0.0&#xD;
redo writes                                 14,572          9.9          1.0&#xD;
....&#xD;
sorts (disk)                                     4          0.0          0.0&#xD;
sorts (memory)                             179,856        122.5         12.3&#xD;
sorts (rows)                             2,750,980      1,874.0        187.8&#xD;
....&#xD;
transaction rollbacks                           36          0.0          0.0&#xD;
transaction tables consistent rea                0          0.0          0.0&#xD;
transaction tables consistent rea                0          0.0          0.0&#xD;
user calls                               1,390,718        947.4         94.9&#xD;
user commits                                14,136          9.6          1.0&#xD;
user rollbacks                                 512          0.4          0.0&#xD;
write clones created in backgroun                0          0.0          0.0&#xD;
write clones created in foregroun               11          0.0          0.0&#xD;
          -------------------------------------------------------------&#xD;
&#xD;
      &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;&lt;strong&gt;&#xD;
avg.redo write size = (Redo block written/redo writes)*512 bytes&#xD;
      = ( 93,853 / 14,572 )*512 &#xD;
      = 3K    &lt;/strong&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;这个平均过小了，说明系统的提交过于频繁.&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="736"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;Latch Sleep breakdown for DB: DPSHDB  Instance: dpshdb  Snaps: 3473 -3475&#xD;
-&amp;gt; ordered by misses desc&#xD;
&#xD;
                                Get                                  Spin &amp;amp;&#xD;
Latch Name                    Requests         Misses      Sleeps Sleeps 1-&amp;gt;4&#xD;
-------------------------- -------------- ----------- ----------- ------------&#xD;
row cache objects              12,257,850     113,299          64 113235/64/0/&#xD;
                                                                  0/0&#xD;
shared pool                     3,690,715      60,279      15,857 52484/588/65&#xD;
                                                                  46/661/0&#xD;
library cache                   4,912,465      29,454       8,876 23823/2682/2 &#xD;
                                                                  733/216/0&#xD;
cache buffers chains           10,314,526       2,856          33 2823/33/0/0/&#xD;
                                                                  0&#xD;
redo writing                       76,550         937           1 936/1/0/0/0&#xD;
session idle bit                2,871,949         225           1 224/1/0/0/0&#xD;
messages                          107,950         159           2 157/2/0/0/0&#xD;
session allocation                184,386          44           6 38/6/0/0/0&#xD;
checkpoint queue latch             96,583           1           1 0/1/0/0/0&#xD;
          -------------------------------------------------------------    &#xD;
   &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;由于过渡频繁的提交，LGWR过度频繁的激活，我们看到这里出现了redo writing的latch竞争.&lt;/p&gt;&#xD;
&lt;p&gt;关于redo writing竞争你可以在steve的站点找到详细的介绍:&lt;br /&gt;&lt;a href="http://www.ixora.com.au/notes/lgwr_latching.htm"&gt;http://www.ixora.com.au/notes/lgwr_latching.htm&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;转引如下:&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="736"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;When LGWR wakes up, it first takes the redo writing latch to update the SGA variable that shows whether it is active. This &lt;strong&gt;prevents&lt;/strong&gt; other Oracle processes from posting LGWR &lt;strong&gt;needlessly&lt;/strong&gt;. LGWR then takes the redo allocation latch to determine how much redo might be available to write (subject to the release of the redo copy latches). If none, it takes the redo writing latch again to record that it is no longer active, before starting another rdbms ipc message wait. &lt;br /&gt;If there is redo to write, LGWR then inspects the latch recovery areas for the redo copy latches (without taking the latches) to determine whether there are any incomplete copies into the log buffer. For incomplete copies above the sync RBA, LGWR just defers the writing of that block and subsequent log buffer blocks. For incomplete copies below the sync RBA, LGWR sleeps on a LGWR wait for redo copy wait event, and is posted when the required copy latches have been released. The time taken by LGWR to take the redo writing and redo allocation latches and to wait for the redo copy latches is accumulated in the redo writer latching time statistic. &lt;/p&gt;&#xD;
&lt;p&gt;(Prior to release 8i, foreground processes held the redo copy latches more briefly because they did not retain them for the application of the change vectors. Therefore, LGWR would instead attempt to assure itself that there were no ongoing copies into the log buffer by taking all the redo copy latches.) &lt;/p&gt;&#xD;
&lt;p&gt;After each redo write has completed, LGWR takes the redo allocation latch again in order to update the SGA variable containing the base disk block for the log buffer. This effectively frees the log buffer blocks that have just been written, so that they may be reused. &lt;/p&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.eygle.com/statspack/statspack14-LogFileSync.htm"&gt;http://www.eygle.com/statspack/statspack14-LogFileSync.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Monday/aggbug/2174786.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/13/2174786.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/13/2174770.html</id><title type="text">Statspack之十三-Enqueue(转贴)</title><summary type="text">enqueue是一种保护共享资源的锁定机制。该锁定机制保护共享资源，如记录中的数据，以避免两个人在同一时间更新 同一数据。enqueue包括一个排队机制，即FIFO（先进先出）排队机制。 Enqueue等待常见的有ST、HW 、TX 、TM等ST enqueue，用于空间管理和字典管理的表空间(DMT)的区间分配，在DMT中典型的是对于uet$和fet$数据字典表的 争用。对于支持LMT的版本，应该尽量使用本地管理表空间. 或者考虑手工预分配一定数量的区(Extent)，减少动态扩展时发生的严重队列竞争。 我们通过一个实例来看一下: DB Name DB Id Insta...</summary><published>2011-09-13T07:22:00Z</published><updated>2011-09-13T07:22:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/13/2174770.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/13/2174770.html"/><content type="html">&lt;p  align="left"&gt;enqueue是一种保护共享资源的锁定机制。该锁定机制保护共享资源，如记录中的数据，以避免两个人在同一时间更新 同一数据。enqueue&lt;br /&gt;包括一个排队机制，即FIFO（先进先出）排队机制。 &lt;/p&gt;&#xD;
&lt;p  align="left"&gt;Enqueue等待常见的有ST、HW 、TX 、TM等&lt;/p&gt;&#xD;
&lt;p  align="left"&gt;ST enqueue，用于空间管理和字典管理的表空间(DMT)的区间分配，在DMT中典型的是对于uet$和fet$数据字典表的 争用。对于支持LMT的&lt;br /&gt;版本，应该尽量使用本地管理表空间. 或者考虑手工预分配一定数量的区(Extent)，减少动态扩展&lt;br /&gt;时发生的严重队列竞争。 &lt;/p&gt;&#xD;
&lt;p&gt;我们通过一个实例来看一下: &lt;br /&gt;&lt;/p&gt;&lt;pre&gt;DB Name         DB Id    Instance     Inst Num Release     OPS Host&#xD;
------------ ----------- ------------ -------- ----------- --- ------------------&#xD;
DB       40757346      aaa                 1 8.1.7.4.0   NO    server&#xD;
&#xD;
                Snap Id     Snap Time      Sessions&#xD;
                ------- ------------------ --------&#xD;
 Begin Snap:       2845 31-10月-03 02:10:16      46&#xD;
   End Snap:       2848 31-10月-03 03:40:05      46&#xD;
    Elapsed:                  89.82 (mins)&#xD;
&#xD;
&#xD;
&lt;strong&gt;对于一个Statspack的report,采样时间是非常重要的维度，离开时间做参考，任何等待都不足以说明问题。&lt;/strong&gt;&#xD;
&#xD;
Cache Sizes&#xD;
~~~~~~~~~~~&#xD;
           db_block_buffers:      51200          log_buffer:    2097152&#xD;
              db_block_size:      16384    shared_pool_size:  209715200&#xD;
...........&#xD;
Top 5 Wait Events&#xD;
~~~~~~~~~~~~~~~~~                                   Wait     % Total&#xD;
Event                                               Waits  Time (cs)   Wt Time&#xD;
-------------------------------------------- ------------ ------------ -------&#xD;
enqueue                                            53,793   16,192,686   67.86&#xD;
rdbms ipc message                                  19,999    5,927,350   24.84&#xD;
pmon timer                                          1,754      538,797    2.26&#xD;
smon timer                                             17      522,281    2.19&#xD;
SQL*Net message from client                   94,525      520,104   2.18&#xD;
          -------------------------------------------------------------&#xD;
&#xD;
&lt;strong&gt;在Statspack分析中，Top 5等待事件是我们最为关注的部分。&#xD;
这个系统中，除了enqueue 等待事件以外，其他4个都属于空闲等待事件，无须关注。我们来关注一下enqueue等&#xD;
待事件，在89.82 (mins)的采样间隔内，累计enqueue等待长达16,192,686cs,即45小时左右。这个等待已经太过&#xD;
显著，实际上这个系统也正因此遭遇了巨大的困难，观察到队列等待以后，我们就应该关注队列等待在等待什么&#xD;
资源。快速跳转的Statspack的其他部分，我们看到以下详细内容:&lt;/strong&gt;&#xD;
&#xD;
Enqueue activity for DB: DB  Instance: aaa  Snaps: 2716 -2718&#xD;
-&amp;gt; ordered by waits desc, gets desc&#xD;
&#xD;
Enqueue            Gets      Waits&#xD;
---------- ------------ ----------&#xD;
ST                1,554      1,554&#xD;
          -------------------------------------------------------------&#xD;
&#xD;
&lt;strong&gt;我们看到主要队列等待在等待ST锁定，对于DMT，我们说这个等待跟FET$,UET$的争用紧密相关。我们在回过头来&#xD;
研究捕获的SQL语句:&#xD;
&lt;/strong&gt;&#xD;
-&amp;gt; End Buffer Gets Threshold:   10000&#xD;
-&amp;gt; Note that resources reported for PL/SQL includes the resources used by&#xD;
   all SQL statements called within the PL/SQL code.  As individual SQL&#xD;
   statements are also reported, it is possible and valid for the summed&#xD;
   total % to exceed 100&#xD;
&#xD;
  Buffer Gets    Executions  Gets per Exec  % Total  Hash Value&#xD;
--------------- ------------ -------------- ------- ------------&#xD;
      4,800,073       10,268          467.5    51.0   2913840444&#xD;
select length from fet$ where file#=:1 and block#=:2 and ts#=:3&#xD;
&#xD;
        803,187       10,223           78.6     8.5    528349613&#xD;
delete from uet$ where ts#=:1 and segfile#=:2 and segblock#=:3 a&#xD;
nd ext#=:4&#xD;
&#xD;
        454,444       10,300           44.1     4.8   1839874543&#xD;
select file#,block#,length from uet$ where ts#=:1 and segfile#=:&#xD;
2 and segblock#=:3 and ext#=:4&#xD;
&#xD;
         23,110       10,230            2.3     0.2   3230982141&#xD;
insert into fet$ (file#,block#,ts#,length) values (:1,:2,:3,:4)&#xD;
&#xD;
         21,201          347           61.1     0.2   1705880752&#xD;
select file# from file$ where ts#=:1&#xD;
....&#xD;
          9,505           12          792.1     0.1   1714733582&#xD;
select f.file#, f.block#, f.ts#, f.length from fet$ f, ts$ t whe&#xD;
re t.ts#=f.ts# and t.dflextpct!=0 and t.bitmapped=0&#xD;
&#xD;
          6,426          235           27.3     0.1   1877781575&#xD;
delete from fet$ where file#=:1 and block#=:2 and ts#=:3&#xD;
&#xD;
&lt;strong&gt; &lt;/strong&gt;&lt;/pre&gt;&lt;strong&gt;我们看到数据库频繁操作UET$,FET$系统表已经成为了系统的主要瓶颈。至此，我们已经可以准确的为该系统定位问题，相应的解决方案也很容易确定，在8.1.7中，使用LMT代替DMT，这是解决问题的根本办法，当然实施起来还要进行综合考虑，实际情况还要复杂得多。 &lt;/strong&gt;&#xD;
&lt;p&gt;&lt;/p&gt;HW enqueue指和段的高水位标记相关等待；手动分配适当区可以避免这一等待。&lt;br /&gt;&lt;br /&gt;TX锁（事务锁）是最常见的enqueue等待。TX enqueue等待通常是以下三个问题之一产生的结果。 &lt;br /&gt;第一个问题是唯一索引中的重复索引，你需要执行提交（commit）/回滚（rollback）操作来释放enqueue。 &lt;br /&gt;第二个问题是对同一位图索引段的多次更新。因为单个位图段可能包含多个行地址（rowid），所以当多个用户试图更新同一段时，可能一个&lt;br /&gt;用户会锁定其他用户请求的记录，这时等待出现。直到获得锁定的用户提交或回滚， enqueue释放。 &lt;br /&gt;第三个问题，也是最可能发生的问题是多个用户同时更新同一个块。如果没有足够的ITL槽，就会发生块级锁定。通过增大initrans和/或maxtrans以允许使用多个ITL槽（对于频繁并发进行DML操作的数据表，在建表之初就应该考虑为相应参数设置合理的数值，避免系统运行以后在线的更改，在8i之前，freelists等参数不能在线更改，设计时的考虑就尤为重要），或者增大表上的pctfree值，就可以很容易的避免这种情况。&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;p&gt;TM enqueue队列锁在进行DML操作前获得，以阻止对正在操作的数据表进行任何DDL操作(在DML操作一个数据表时，其结构不能被更改)。 &lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.eygle.com/statspack/statspack13.htm"&gt;http://www.eygle.com/statspack/statspack13.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Monday/aggbug/2174770.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/13/2174770.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/07/2170048.html</id><title type="text">Statspack之十二-db file scattered read-DB文件分散读取（转帖）</title><summary type="text">这种情况通常显示与全表扫描相关的等待。当数据库进行全表扫时，基于性能的考虑，数据会分散(scattered)读入Buffer Cache。如果这个等待事件比较显著，可能说明对于某些全表扫描的表，没有创建索引或者没有创建合适的索引，我们可能需要检查这些数据表已确定是否进行了正确的设置。然而这个等待事件不一定意味着性能低下，在某些条件下Oracle会主动使用全表扫描来替换索引扫描以提高性能，这和访问的数据量有关，在CBO下Oracle会进行更为智能的选择，在RBO下Oracle更倾向于使用索引。因为全表扫描被置于LRU（Least Recently Used，最近最少适用）列表的冷端（cold e</summary><published>2011-09-07T08:53:00Z</published><updated>2011-09-07T08:53:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2170048.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2170048.html"/><content type="html">&lt;p  align="left"&gt;这种情况通常显示与全表扫描相关的等待。&lt;br /&gt;当数据库进行全表扫时，基于性能的考虑，数据会分散(scattered)读入Buffer Cache。如果这个等待事件比较显著，&lt;br /&gt;可能说明对于某些全表扫描的表，没有创建索引或者没有创建合适的索引，我们可能需要检查这些数据表已确定是否进&lt;br /&gt;行了正确的设置。&lt;/p&gt;&#xD;
&lt;p  align="left"&gt;然而这个等待事件不一定意味着性能低下，在某些条件下Oracle会主动使用全表扫描来替换索引扫描以提高性能，这&lt;br /&gt;和访问的数据量有关，在CBO下Oracle会进行更为智能的选择，在RBO下Oracle更倾向于使用索引。&lt;/p&gt;&#xD;
&lt;p  align="left"&gt;因为全表扫描被置于LRU（Least Recently Used，最近最少适用）列表的冷端（cold end），对于频繁访问的较&lt;br /&gt;小的数据表，可以选择把他们Cache到内存中，以避免反复读取。&lt;/p&gt;&#xD;
&lt;p  align="left"&gt;当这个等待事件比较显著时，可以结合v$session_longops动态性能视图来进行诊断，该视图中记录了长时间（运&lt;br /&gt;行时间超过6秒的）运行的事物，可能很多是全表扫描操作（不管怎样，这部分信息都是值得我们注意的）。&lt;/p&gt;&#xD;
&lt;p  align="left"&gt;我们通过通过一个案例分析来熟悉一下这个等待事件:&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;div  align="left"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;table border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="734" bgcolor="#999999"&gt;&lt;span &gt;&lt;pre&gt;DB Name        DB Id     Instance    Inst Num  Release     OPS   Host         &#xD;
----------  -----------  ----------  --------  ----------  ----  ----------   &#xD;
K2        1999167370      k2              1  8.1.5.0.0   NO      k2       &#xD;
&#xD;
&#xD;
&lt;strong&gt;这是一个8.1.5的数据库系统，通过脚本增强，我们可以在8.1.5的数据库上使用statspack来进行数据库诊断。&lt;/strong&gt;&#xD;
&#xD;
                                                             Snap Length   &#xD;
Start Id    End Id       Start Time             End Time         (Minutes)    &#xD;
--------  --------  --------------------  --------------------  -----------   &#xD;
     170       176  25-Feb-03 10:00:11    25-Feb-03 15:00:05         299.90   &#xD;
&#xD;
Cache Sizes                                                                   &#xD;
~~~~~~~~~~~                                                                   &#xD;
           db_block_buffers:       64000                                      &#xD;
              db_block_size:        8192                                      &#xD;
                 log_buffer:     8388608                                      &#xD;
           shared_pool_size:   157286400                                      &#xD;
                                                                              &#xD;
&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;                    &#xD;
                                                                              &#xD;
Top 5 Wait Events                                                             &#xD;
~~~~~~~~~~~~~~~~~                                                     Wait  % Total&#xD;
Event                                          Waits     Time (cs)  Wt Time&#xD;
-------------------------------------------- ------------ ----------------------- -------&#xD;
db file scattered read                         16,842,920             3,490,719   43.32&#xD;
latch free                                     844,272      3,270,073   40.58&#xD;
buffer busy waits                               114,421          933,136   11.58&#xD;
db file sequential read                          2,067,910         117,750    1.46&#xD;
enqueue                                          464          110,840    1.38&#xD;
         -------------------------------------------------------------        &#xD;
&#xD;
&lt;strong&gt;这是一个典型的性能低下的系统，几个重要的等待事件都在Top 5中出现，其中，前3个等待极为显著，需要进行&#xD;
相应的调整。&#xD;
在5小时的采样间隔内，其中db file scattered read累计等待时间约10小时，已经成为影响系统性能的主要原因。&#xD;
了解了这些以后我们就可以进一步察看相关SQL看是否存在可以的SQL语句。&#xD;
&lt;/strong&gt;&#xD;
SQL ordered by Gets for DB: K2  Instance: k2  Snaps:     170 -    176   &#xD;
                                                                              &#xD;
                                Gets       % of                               &#xD;
   Buffer Gets     Executes   per Exec    Total   Hash Value                  &#xD;
-------------- ------------ ------------ ------ ------------                  &#xD;
SQL statement                                                                 &#xD;
------------------------------------------------------------------------------&#xD;
     6,480,163           12    540,013.6    2.4   3791855498                  &#xD;
  SELECT "PROCESS_REQ"."WORK_ID", "PROCESS_REQ"."STOCK_NO",    "PROCESS_R&#xD;
                                                                              &#xD;
     3,784,566           16    236,535.4    1.4   2932917818                  &#xD;
SELECT * FROM FIND_LATER_WO ORDER BY NOTE,ORDER_NO                            &#xD;
                                                                                &#xD;
     1,200,976            3    400,325.3     .4   4122791109                  &#xD;
  SELECT "ITEM_STOCK"."ITEM_NO",              "ITEM"."NOTE",            "ITEM"&#xD;
                                                                               &#xD;
       923,944            9    102,660.4     .3   2200071737                  &#xD;
  SELECT  "ITEM_STOCK"."ITEM_NO" ,           "ITEM_STOCK"."STOCK_NO" ,        &#xD;
                                                                              &#xD;
       921,301            3    307,100.3     .3   2218843294                  &#xD;
  SELECT "ITEM_STOCK"."ITEM_NO",              "ITEM"."NOTE",            "ITEM"&#xD;
                                                                              &#xD;
       911,285            3    303,761.7     .3   1769130587                  &#xD;
  SELECT  "LISTS"."ITEM_NO" ,           "LISTS"."SUB_ITEM" ,           "LISTS"&#xD;
                                                                              &#xD;
       831,439            2    415,719.5     .3   1349577999                  &#xD;
  SELECT  "GROUP_OPER"."ITEM_NO" ,           "GROUP_OPER"."PROCESS_ID" ,      &#xD;
                                                                              &#xD;
       802,918            1    802,918.0     .3   3613809507                  &#xD;
  SELECT  "LISTS"."ITEM_NO" ,           "LISTS"."SUB_ITEM" ,           "ITEM".&#xD;
                                                                              &#xD;
       800,548            2    400,274.0     .3   2643788247                  &#xD;
  SELECT "ITEM_STOCK"."ITEM_NO",              "ITEM"."NOTE",            "ITEM"&#xD;
                                                                              &#xD;
       666,085            2    333,042.5     .2   3391363608                  &#xD;
  SELECT "ITEM_STOCK"."ITEM_NO",              "ITEM_STOCK"."STOCK_NO",        &#xD;
          &amp;#8230;&amp;#8230;&amp;#8230;..                                                               &#xD;
&#xD;
&lt;strong&gt;注意到以上很多查询导致的Buffer Gets都非常庞大，我们非常有理由怀疑索引存在问题，甚至缺少必要的索引。&#xD;
以上记录的是SQL的片段，通过Hash Value值结合v$sql_text我们可以获得完整的SQL语句。&#xD;
&#xD;
在这次诊断中，我紧接着去查询的是v$session_longops数据表，一个分组查询的结果如下:&lt;/strong&gt;&#xD;
&#xD;
TARGET                                  COUNT(*)&#xD;
---------------------------------------------------------------- ----------&#xD;
SA.PPBT_GRAPHOBJTABLE                  418&#xD;
SA.PPBT_PPBTOBJRELATTABLE              53&#xD;
&#xD;
&lt;strong&gt;我们发现这些问题SQL的全表扫描(结合v$session_longops视图中的OPNAME)主要集中在PPBT_GRAPHOBJTABLE和&#xD;
PPBT_PPBTOBJRELATTABLE两张数据表上。&#xD;
进一步研究发现这两个数据表上没有任何索引，并且有相当的数据量:&#xD;
&lt;/strong&gt;&#xD;
SQL&amp;gt; select count(*) from SA.PPBT_PPBTOBJRELATTABLE;&#xD;
&#xD;
  COUNT(*)&#xD;
----------&#xD;
   1209017&#xD;
　SQL&amp;gt; select count(*) from SA.PPBT_GRAPHOBJTABLE;&#xD;
&#xD;
   COUNT(*)&#xD;
----------&#xD;
      2445&#xD;
&#xD;
&lt;strong&gt;在创建了合适的索引后，系统性能得到了大幅提高!&lt;/strong&gt;&#xD;
       &#xD;
                      &lt;/pre&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.eygle.com/statspack/statspack12.htm"&gt;http://www.eygle.com/statspack/statspack12.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Monday/aggbug/2170048.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/07/2170048.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/07/2170025.html</id><title type="text">Statspack之十一-Statspack报告各部分简要说明（转帖）</title><summary type="text">第一部分 数据库概要信息DB Name DB Id Instance Inst Num Release Cluster Host---------- ----------- ------------ -------- ----------- ------------GLOB 188430914 glob 1 9.2.0.4.0 NO b02第二部分 数据库采样时段，这一部分记录了数据库采样的时间，以及采样点数，这部分信息对于report来说是十分重要。任何统计数据都需要通过时间纬度来衡量，离开...</summary><published>2011-09-07T08:42:00Z</published><updated>2011-09-07T08:42:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2170025.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2170025.html"/><content type="html">&lt;ul &gt;&#xD;
&lt;ul&gt;&lt;li&gt;第一部分 &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&#xD;
&lt;p &gt;数据库概要信息&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;DB Name         DB Id    Instance     Inst Num Release     Cluster Host&#xD;
---------- ----------- ------------ --------   -----------  ------------&#xD;
GLOB         188430914   glob              1  9.2.0.4.0   NO    b02&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;ul &gt;&#xD;
&lt;ul&gt;&lt;li&gt;第二部分 &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&#xD;
&lt;p &gt;数据库采样时段，这一部分记录了数据库采样的时间，以及采样点数，这部分信息对于report来说是十分重要。&lt;/p&gt;&#xD;
&lt;p &gt;任何统计数据都需要通过时间纬度来衡量，离开了时间，任何数据都失去了意义。&lt;/p&gt;&#xD;
&lt;p &gt;我们在论坛上经常看到有人贴出Top 5等待事件寻求分析，我们的回答是:&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong&gt;无法分析，如果没有时间纬度!&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;Snap Id     Snap Time      Sessions Curs/Sess Comment&#xD;
            ------- ------------------ -------- --------- -------------------&#xD;
Begin Snap:   508    10-Nov-03 15:27:29       76      39.4&#xD;
End Snap:     511    10-Nov-03 15:57:42       66      35.4&#xD;
   Elapsed:                               30.22 (mins)&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;ul &gt;&#xD;
&lt;ul&gt;&lt;li&gt;第三部分 &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&#xD;
&lt;p &gt;主要性能指标说明:&lt;/p&gt;&#xD;
&lt;ul &gt;&lt;li&gt;Execute to Parse %执行分析比率 &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;Instance Efficiency Percentages (Target 100%)&#xD;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&#xD;
            Buffer Nowait %:  100.00       Redo NoWait %: 100.00&#xD;
            Buffer  Hit   %:   99.81    In-memory Sort %: 100.00&#xD;
            Library Hit   %:   98.75        Soft Parse %:  97.05&#xD;
         Execute to Parse %:   44.21         Latch Hit %:  94.79&#xD;
Parse CPU to Parse Elapsd %:   11.74     % Non-Parse CPU:  96.08&#xD;
&lt;/pre&gt;&#xD;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;执行分析比率计算公式如下:&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="590"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;100 * (1 - Parses/Executions) = Execute to Parse&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;所以如果系统Parses &amp;gt; Executions,就可能出现该比率小于0的情况.&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;该参数计算来自以下部分:&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;Instance Activity Stats for DB: ORA9  Instance: ora91  Snaps: 30 -32&#xD;
&#xD;
Statistic                              Total     per Second    per Trans&#xD;
--------------------------------- ------------------ -------------- ------------&#xD;
exchange deadlocks                       481            0.2          0.0&#xD;
execute count                      4,873,158        1,968.2         94.4&#xD;
&#xD;
&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&#xD;
&#xD;
parse count (failures)                   542            0.2          0.0&#xD;
parse count (hard)                    80,281           32.4          1.6&#xD;
parse count (total)                2,718,643        1,098.0         52.6&#xD;
parse time cpu                        44,009           17.8          0.9&#xD;
parse time elapsed                   374,902          151.4          7.3&#xD;
&#xD;
&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;.&#xD;
&lt;/pre&gt;&#xD;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;通过公式及以上两个数值：&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="590"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;100 * (1 - Parses/Executions) = Execute to Parse&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;100 * (1 - &lt;strong&gt;2,718,643/4,873,158) = 0.44211884777797067117462 * 100 = 44.21&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;该值&amp;lt;0通常说明shared pool设置或效率存在问题&lt;/p&gt;&#xD;
&lt;p &gt;造成反复解析，reparse可能较严重,或者可是同snapshot有关&lt;/p&gt;&#xD;
&lt;p &gt;如果该值为负值或者极低,通常说明数据库性能存在问题&lt;/p&gt;&#xD;
&lt;ul &gt;&lt;li&gt;Parse CPU to Parse Elapsd % &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p &gt;来自parse time cpu和parse time elapsed&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="535"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;100*（parse time cpu / parse time elapsed）= Parse CPU to Parse Elapsd %&lt;/p&gt;&#xD;
&lt;p&gt;100*（44,009 / 374,902）= 11.7388010733471680599196590% = 11.74% &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;ul &gt;&lt;li&gt;Rollback per transaction 平均事务回滚率 &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;% Blocks changed per Read:    0.37    Recursive Call %:    1.14&#xD;
   Rollback per transaction %:   38.22       Rows per Sort:   11.83&#xD;
&#xD;
&#xD;
如果回滚率过高，可能说明你的数据库经历了太多的无效操作&#xD;
过多的回滚可能还会带来Undo Block的竞争&#xD;
&#xD;
该参数计算公式如下:&lt;br /&gt;&#xD;
&#xD;
     Round(User rollbacks / (user commits + user rollbacks) ,4)* 100%&#xD;
&#xD;
&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;.&#xD;
user commits                             31,910           12.9          0.6&#xD;
user rollbacks                           19,740            8.0          0.4&#xD;
&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;.&lt;br /&gt;&#xD;
对于本例:&lt;br /&gt;&#xD;
     Round(19740 / (31910 + 19740),4) = .3822&#xD;
&#xD;
  &lt;/pre&gt;&#xD;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;这一部分的内容还没有写完,在继续进行中...&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.eygle.com/statspack/statspack11.htm"&gt;http://www.eygle.com/statspack/statspack11.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Monday/aggbug/2170025.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/07/2170025.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/07/2169991.html</id><title type="text">Statspack之十-调整STATSPACK的收集门限（转帖）</title><summary type="text">Statspack有两种类型的收集选项：级别（level）：控制收集数据的类型门限（threshold）：设置收集的数据的阈值。1．级别（level）Statspack共有三种快照级别，默认值是5a.level 0: 一般性能统计。包括等待事件、系统事件、系统统计、回滚段统计、行缓存、SGA、会话、锁、缓冲池统计等等。b.level 5: 增加SQL语句。除了包括level0的所有内容，还包括SQL语句的收集，收集结果记录在stats$sql_summary中。c.level 10: 增加子锁存统计。包括level5的所有内容。并且还会将附加的子锁存存入stats$lathc_children</summary><published>2011-09-07T08:26:00Z</published><updated>2011-09-07T08:26:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169991.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169991.html"/><content type="html">&lt;p &gt;Statspack有两种类型的收集选项：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p &gt;级别（level）：控制收集数据的类型&lt;/p&gt;&#xD;
&lt;p &gt;门限（threshold）：设置收集的数据的阈值。&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;1．级别（level）&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p &gt;Statspack共有三种快照级别，默认值是5&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p &gt;a.level 0: 一般性能统计。包括等待事件、系统事件、系统统计、回滚段统计、行缓存、SGA、会话、锁、缓冲池统计等等。&lt;/p&gt;&#xD;
&lt;p &gt;b.level 5: 增加SQL语句。除了包括level0的所有内容，还包括SQL语句的收集，收集结果记录在stats$sql_summary中。&lt;/p&gt;&#xD;
&lt;p &gt;c.level 10: 增加子锁存统计。包括level5的所有内容。并且还会将附加的子锁存存入stats$lathc_children中。在使用这个级别时需要慎重，建议在Oracle support的指导下进行。&lt;/p&gt;&#xD;
&lt;p &gt;可以通过statspack包修改缺省的级别设置&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQL&amp;gt;execute statspack.snap(i_snap_level=&amp;gt;0,i_modify_parameter=&amp;gt;&amp;#8217;true&amp;#8217;);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;通过这样的设置，以后的收集级别都将是0级。&lt;/p&gt;&#xD;
&lt;p &gt;如果你只是想本次改变收集级别，可以忽略i_modify_parameter参数。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQL&amp;gt;execute statspack.snap(i_snap_level=&amp;gt;10);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;2．快照门限&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;快照门限只应用于stats$sql_summary表中获取的SQL语句。&lt;/p&gt;&#xD;
&lt;p &gt;因为每一个快照都会收集很多数据，每一行都代表获取快照时数据库中的一个SQL语句，所以stats$sql_summary很快就会成为Statspack中最大的表。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;门限存储在stats$statspack_parameter表中。让我们了结一下各种门限：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p &gt;a. executions_th这是SQL语句执行的数量(默认值是100)&lt;/p&gt;&#xD;
&lt;p &gt;b. disk_reads_tn这是SQL语句执行的磁盘读入数量（默认值是1000）&lt;/p&gt;&#xD;
&lt;p &gt;c. parse_calls_th这是SQL语句执行的解析调用的数量（默认值是1000）&lt;/p&gt;&#xD;
&lt;p &gt;d. buffer_gets_th这是SQL语句执行的缓冲区获取的数量（默认值是10000）&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;任何一个门限值超过以上参数就会产生一条记录。&lt;/p&gt;&#xD;
&lt;p &gt;通过调用statspack.modify_statspack_parameter函数我们可以改变门限的默认值。&lt;/p&gt;&#xD;
&lt;p &gt;例如：&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQL&amp;gt;execute statspack.modify_statspack_parameter(i_buffer_gets_th=&amp;gt;100000,i_disk_reads_th=&amp;gt;100000;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.eygle.com/statspack/statspack10.htm"&gt;http://www.eygle.com/statspack/statspack10.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Monday/aggbug/2169991.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169991.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/07/2169984.html</id><title type="text">Statspack之九-其它重要脚本（转帖）</title><summary type="text">1．通过导出保存及共享数据在诊断系统问题时，可能需要向专业人士提供原始数据，这时我们可以导出Statspack表数据，其中我们可能用到：spuexp.par其内容主要为：file=spuexp.dmp log=spuexp.log compress=y grants=y indexes=y rows=y constraints=y owner=PERFSTAT consistent=y我们可以导出如下：exp userid=perfstat/my_perfstat_password parfile=spuexp.par2．删除数据spdrop.sql在执行时主要调用两个脚本: spdtab.s</summary><published>2011-09-07T08:23:00Z</published><updated>2011-09-07T08:23:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169984.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169984.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p &gt;1．通过导出保存及共享数据&lt;/p&gt;&#xD;
&lt;p &gt;在诊断系统问题时，可能需要向专业人士提供原始数据，这时我们可以导出Statspack表数据，其中我们可能用到：spuexp.par&lt;/p&gt;&#xD;
&lt;p &gt;其内容主要为：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="700"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;file=spuexp.dmp log=spuexp.log compress=y grants=y indexes=y rows=y constraints=y owner=PERFSTAT consistent=y&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;我们可以导出如下：&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="700"&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;exp userid=perfstat/my_perfstat_password parfile=spuexp.par&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;2．删除数据&lt;/p&gt;&#xD;
&lt;p &gt;spdrop.sql在执行时主要调用两个脚本: spdtab.sql 、spdusr.sql&lt;/p&gt;&#xD;
&lt;p &gt;前者删除表及同义词等数据，后者删除用户&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;3．Oracle92中新增加的脚本&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p &gt;1．用于升级statspack对象的脚本,这些脚本需要以具有SYSDBA权限的用户运行, 升级前请先备份存在的Schema数据:&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p &gt;SPUP90.SQL: 用于升级9.0版本的模式至9.2版本。&lt;br /&gt;SPUP817.SQL: 如果从Statspack 8.1.7升级,需要运行这个脚本&lt;br /&gt;SPUP816.SQL: 从Statspack 8.1.6升级,需要运行这个脚本，然后运行SPUP817.SQL.&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p &gt;&lt;span &gt;2．sprepsql.sql 用于根据给定的SQL Hash值生成SQL报告 &lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;转自：&lt;a href="http://www.eygle.com/statspack/statspack09.htm"&gt;http://www.eygle.com/statspack/statspack09.htm&lt;/a&gt;&lt;img src="http://www.cnblogs.com/Monday/aggbug/2169984.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169984.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/07/2169951.html</id><title type="text">Statspack之八-删除历史数据（转帖）</title><summary type="text">删除stats$snapshot数据表中的相应数据，其他表中的数据会相应的级连删除：SQL&amp;gt; select max(snap_id) from stats$snapshot;MAX(SNAP_ID)------------166SQL&amp;gt; delete from stats$snapshot where snap_id &amp;lt; = 166;143 rows deleted你可以更改snap_id的范围以保留你需要的数据。在以上删除过程中，你可以看到所有相关的表都被锁定。SQL&amp;gt; select a.object_id,a.oracle_username ,b.object_na</summary><published>2011-09-07T08:03:00Z</published><updated>2011-09-07T08:03:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169951.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169951.html"/><content type="html">&lt;p &gt;删除stats$snapshot数据表中的相应数据，其他表中的数据会相应的级连删除：&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;SQL&amp;gt; select max(snap_id) from stats$snapshot;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;MAX(SNAP_ID)&lt;/p&gt;&#xD;
&lt;p&gt;------------&lt;/p&gt;&#xD;
&lt;p&gt;166&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQL&amp;gt; delete from stats$snapshot where snap_id &amp;lt; = 166;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;143 rows deleted&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;你可以更改snap_id的范围以保留你需要的数据。&lt;/p&gt;&#xD;
&lt;p &gt;在以上删除过程中，你可以看到所有相关的表都被锁定。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;SQL&amp;gt; select a.object_id,a.oracle_username ,b.object_name&lt;br /&gt;from v$locked_object a,dba_objects b&lt;br /&gt;where a.object_id = b.object_id&lt;br /&gt;/&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;OBJECT_ID ORACLE_USERNAMEOBJECT_NAME&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------- ---------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;156 PERFSTATSNAP$&lt;/p&gt;&#xD;
&lt;p&gt;39700 PERFSTATSTATS$LIBRARYCACHE&lt;/p&gt;&#xD;
&lt;p&gt;39706 PERFSTATSTATS$ROLLSTAT&lt;/p&gt;&#xD;
&lt;p&gt;39712 PERFSTATSTATS$SGA&lt;/p&gt;&#xD;
&lt;p&gt;39754 PERFSTATSTATS$PARAMETER&lt;/p&gt;&#xD;
&lt;p&gt;39745 PERFSTATSTATS$SQL_STATISTICS&lt;/p&gt;&#xD;
&lt;p&gt;39739 PERFSTATSTATS$SQL_SUMMARY&lt;/p&gt;&#xD;
&lt;p&gt;39736 PERFSTATSTATS$ENQUEUESTAT&lt;/p&gt;&#xD;
&lt;p&gt;39733 PERFSTATSTATS$WAITSTAT&lt;/p&gt;&#xD;
&lt;p&gt;39730 PERFSTATSTATS$BG_EVENT_SUMMARY&lt;/p&gt;&#xD;
&lt;p&gt;39724 PERFSTATSTATS$SYSTEM_EVENT&lt;/p&gt;&#xD;
&lt;p&gt;39718 PERFSTATSTATS$SYSSTAT&lt;/p&gt;&#xD;
&lt;p&gt;39715 PERFSTATSTATS$SGASTAT&lt;/p&gt;&#xD;
&lt;p&gt;39709 PERFSTATSTATS$ROWCACHE_SUMMARY&lt;/p&gt;&#xD;
&lt;p&gt;39703 PERFSTATSTATS$BUFFER_POOL_STATISTICS&lt;/p&gt;&#xD;
&lt;p&gt;39697 PERFSTATSTATS$LATCH_MISSES_SUMMARY&lt;/p&gt;&#xD;
&lt;p&gt;39679 PERFSTATSTATS$SNAPSHOT&lt;/p&gt;&#xD;
&lt;p&gt;39682 PERFSTATSTATS$FILESTATXS&lt;/p&gt;&#xD;
&lt;p&gt;39688 PERFSTATSTATS$LATCH&lt;/p&gt;&#xD;
&lt;p&gt;174 PERFSTATJOB$&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;20 rows selected&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;Oracle还提供了系统脚本用于Truncate这些统计信息表，这个脚本名字是: sptrunc.sql (8i、9i都相同)&lt;/p&gt;&#xD;
&lt;p &gt;该脚本主要内容如下，里面看到的就是statspack相关的所有系统表：&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="585"&gt;&#xD;
&lt;p&gt;truncate table STATS$FILESTATXS;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$LATCH;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$LATCH_CHILDREN;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$LATCH_MISSES_SUMMARY;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$LATCH_PARENT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$LIBRARYCACHE;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$BUFFER_POOL_STATISTICS;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$ROLLSTAT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$ROWCACHE_SUMMARY;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$SGA;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$SGASTAT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$SYSSTAT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$SESSTAT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$SYSTEM_EVENT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$SESSION_EVENT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$BG_EVENT_SUMMARY;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$WAITSTAT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$ENQUEUESTAT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$SQL_SUMMARY;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$SQL_STATISTICS;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$SQLTEXT;&lt;/p&gt;&#xD;
&lt;p&gt;truncate table STATS$PARAMETER;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;delete from STATS$SNAPSHOT;&lt;/p&gt;&#xD;
&lt;p&gt;delete from STATS$DATABASE_INSTANCE;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;commit;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;如果采样了大量的数据，直接Delete是非常缓慢的，可以考虑使用上述SQL截断所有表。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.eygle.com/statspack/statspack08.htm"&gt;http://www.eygle.com/statspack/statspack08.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Monday/aggbug/2169951.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169951.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/07/2169941.html</id><title type="text">Statspack之七-移除定时任务（转贴）</title><summary type="text">移除一个定时任务，可以如下操作: SQL&amp;gt; select job,log_user,priv_user,last_date,next_date,interval from user_jobs;JOB LOG_USERLAST_DATENEXT_DATEINTERVAL---------- ----------------------------------- ------------------------------ -----------22 PERFSTAT 2002-12-5:14:33:26 2002-12-5 14:43:00 trunc(SYSDATE+1/144,&amp;#39</summary><published>2011-09-07T07:55:00Z</published><updated>2011-09-07T07:55:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169941.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169941.html"/><content type="html">&lt;p &gt;移除一个定时任务，可以如下操作: &lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="568"&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQL&amp;gt; select job,log_user,priv_user,last_date,next_date,interval from user_jobs;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;JOB LOG_USERLAST_DATENEXT_DATEINTERVAL&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;---------- ----------------------------------- ------------------------------ -----------&lt;/p&gt;&#xD;
&lt;p&gt;22 PERFSTAT 2002-12-5:14:33:26 2002-12-5 14:43:00 trunc(SYSDATE+1/144,'MI')&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQL&amp;gt; execute dbms_job.remove('22')&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;PL/SQL procedure successfully completed&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;当你完成了一个采样报告，你应该及时移除这个job任务，在生产环境中，遗漏一个无人照顾的job是非常危险的，&lt;br /&gt;如果statspack运行一个星期，采样的数据量是非常惊人的。有的生产企业因疏忽而当机！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.eygle.com/statspack/statspack07.htm"&gt;http://www.eygle.com/statspack/statspack07.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Monday/aggbug/2169941.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169941.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Monday/archive/2011/09/07/2169918.html</id><title type="text">Statspack之六-生成分析报告(转贴)</title><summary type="text">Statspack之六-生成分析报告调用spreport.sql可以生成分析报告：SQL&amp;gt; @spreportDB Id DB Name Inst Num Instance----------- ------------ -------- ------------1277924236 EYGLE 1 eygleCompleted SnapshotsSnap SnapInstance DB Name Id Snap Started Level Comment------------ ------------ ----- ----------------- ----- -----------</summary><published>2011-09-07T07:46:00Z</published><updated>2011-09-07T07:46:00Z</updated><author><name>小光_520</name><uri>http://www.cnblogs.com/Monday/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169918.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169918.html"/><content type="html">&lt;div  align="center"&gt;&#xD;
&lt;p&gt;Statspack之六-生成分析报告&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;p &gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p &gt;调用spreport.sql可以生成分析报告：&lt;/p&gt;&#xD;
&lt;table width="651" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="641" bgcolor="#999999"&gt;&lt;span &gt;&lt;font face="Verdana" size="2"&gt;SQL&amp;gt; @spreport&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&#xD;
&lt;p &gt;DB Id DB Name Inst Num Instance&lt;br /&gt;----------- ------------ -------- ------------&lt;br /&gt;1277924236 EYGLE 1 eygle&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p &gt;Completed Snapshots&lt;/p&gt;&#xD;
&lt;p &gt;Snap Snap&lt;br /&gt;Instance DB Name Id Snap Started Level Comment&lt;br /&gt;------------ ------------ ----- ----------------- ----- ----------------------&lt;br /&gt;eygle EYGLE 1 04 12月 2002 14:30 5&lt;br /&gt;eygle EYGLE 2 04 12月 2002 15:00 5&lt;br /&gt;&lt;br /&gt;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&lt;/p&gt;&#xD;
&lt;p &gt;eygle EYGLE 98 05 12月 2002 04:10 5&lt;br /&gt;eygle EYGLE 99 05 12月 2002 04:20 5&lt;br /&gt;eygle EYGLE 100 05 12月 2002 04:30 5&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p &gt;....&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p &gt;Specify the Begin and End Snapshot Ids&lt;br /&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;输入 begin_snap 的值: 1&lt;br /&gt;Begin Snapshot Id specified: 1&lt;/p&gt;&#xD;
&lt;p &gt;输入 end_snap 的值: 100&lt;br /&gt;End Snapshot Id specified: 100&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p &gt;Specify the Report Name&lt;br /&gt;~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;The default report file name is sp_1_100. To use this name,&lt;br /&gt;press &amp;lt;return&amp;gt; to continue, otherwise enter an alternative.&lt;br /&gt;输入 report_name 的值: rep1205.txt&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span &gt;Using the report name rep1205.txt&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p &gt;这样就生成了一个报告，可是如果中间停过机，那么你可能收到以下错误信息：&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" bgcolor="#999999"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  valign="top" width="645"&gt;&#xD;
&lt;p&gt;ERROR: Snapshots chosen span an instance shutdown: RESULTS ARE INVALID&lt;/p&gt;&#xD;
&lt;p&gt;STATSPACK report for&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;DB NameDB IdInstanceInst Num ReleaseOPS Host&lt;/p&gt;&#xD;
&lt;p&gt;------------ ----------- ------------ -------- ----------- --- ------------&lt;/p&gt;&#xD;
&lt;p&gt;EYGLE1277924236 eygle1 8.1.7.0.0NOAM-SERVER&lt;/p&gt;&#xD;
&lt;p&gt;:ela:=;&lt;/p&gt;&#xD;
&lt;p&gt;*&lt;/p&gt;&#xD;
&lt;p&gt;ERROR 位于第 4 行:&lt;/p&gt;&#xD;
&lt;p&gt;ORA-06550: 第 4 行, 第 17 列:&lt;/p&gt;&#xD;
&lt;p&gt;PLS-00103: 出现符号 ";"在需要下列之一时：&lt;/p&gt;&#xD;
&lt;p&gt;(-+modnotnull&amp;lt;an identifier&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;a double-quoted delimited-identifier&amp;gt;&amp;lt;a bind variable&amp;gt;avg&lt;/p&gt;&#xD;
&lt;p&gt;countcurrentexistsmaxminpriorsqlstddevsumvarianceexecute&lt;/p&gt;&#xD;
&lt;p&gt;foralltimetimestampintervaldate&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;a string literal with character set specification&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;a number&amp;gt;&amp;lt;a single-quoted SQL string&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;符号 "null" 被替换为 ";" 后继续。&lt;/p&gt;&#xD;
&lt;p&gt;ORA-06550: 第 6 行, 第 16 列:&lt;/p&gt;&#xD;
&lt;p&gt;PLS-00103: 出现符号 ";"在需要下列之一时：&lt;/p&gt;&#xD;
&lt;p&gt;(-+modnotnull&amp;lt;an identifier&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;a double-quoted delimited-identifier&amp;gt;&amp;lt;a bind variable&amp;gt;avg&lt;/p&gt;&#xD;
&lt;p&gt;countcurrentexistsmaxminpriorsqlstddevsumvarianceexecute&lt;/p&gt;&#xD;
&lt;p&gt;foralltimetimestampintervaldate&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;a stri&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span &gt;&lt;font face="Verdana"&gt;一个statspack的报告不能跨越一次停机，但是之前或之后的连续区间，收集的信息依然有效。你可以选择之前或之后的采样声称report。&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span &gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span &gt;转自：&amp;nbsp;&lt;a href="http://www.eygle.com/statspack/statspack06.htm"&gt;http://www.eygle.com/statspack/statspack06.htm&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Monday/aggbug/2169918.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Monday/archive/2011/09/07/2169918.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
