互联网的WEB2.0和WEB1.0技术各有什么区别?
2008-12-29 09:48
507 查看
2.4.2 [/b]Partition Outer Joins [/b]
Partition outer
joins 是Oracle10g中令人感兴趣的的特性。它可以将数据分成组,句体我也说不清,看了下面的例子你就明白了:
(表employee_expanse)
SELECT * FROM employee_expense;
EMP_ID
YEAR MONTH EXPENSE_CLAIM
APPROVED_AMT PAID_DATE
---------- ---------- ----------
------------- ------------ ---------
7369
2002 2 3072.43 3072.43 03-MAR-02
7369
2002 4 30 30 01-JUN-02
7369
2002 5 235.03 35.03 01-JUN-02
7369
2002 9 5095.98 5095.08 31-OCT-02
7369
2002 12 1001.01 1001.01 01-FEB-03
7782
2002 1 111.09 111.09 01-FEB-02
7782
2002 3 9.85 9.85 01-APR-02
7782
2002 7 3987.32 3987.32 01-AUG-02
7782
2002 9 1200 1200 01-OCT-02
(表months)
SELECT * FROM months WHERE year = 2002;
YEAR MONTH
---------- ----------
2002 1
2002 2
2002 3
2002 4
2002 5
2002 6
2002 7
2002 8
2002 9
2002 10
2002 11 2002
12
你可以用month表中的反回的12行,做一个left outer join 把某个员工(employee)每月的expense显示出来:
SELECT NVL(ee.emp_id, 7782), m.year,
m.month, NVL(ee.expense_claim,0)
FROM (SELECT * FROM months WHERE year =
2002) m
LEFT OUTER JOIN (SELECT *
FROM employee_expense
WHERE emp_id = 7782) ee
ON m.year = ee.year AND m.month = ee.month
ORDER BY m.month;
(NVL(value,0)该函数的意思是当value的值为空时,以0代替)
NVL(EE.EMP_ID,7782) YEAR
MONTH NVL(EE.EXPENSE_CLAIM,0)
------------------- ---------- ----------
-----------------------
7782 2002 1 111.09
7782
2002 2 0
7782 2002 3 9.85
7782 2002 4 0
7782 2002 5 0
7782 2002 6 0
7782 2002 7 3987.32
7782 2002 8 0
7782 2002 9 1200
7782 2002 10 0
7782 2002 11 0
我们可以看到emp_id 为 7782的员工在2002今天各个月份的EXPENSE_CLAIM 被显示出来了,那么如果我人要显示每个员工的在2002今天各个月份的EXPENSE_CLAIM么怎么办,那么Partition Outer Joins 就起作用了:
SELECT ee.emp_id, m.year, m.month,
NVL(ee.expense_claim,0)
FROM (SELECT * FROM months WHERE year =
2002) m
LEFT OUTER JOIN employee_expense ee
PARTITION BY (ee.emp_id)
ON m.year = ee.year AND m.month = ee.month
ORDER BY ee.emp_id, m.month;
EMP_ID YEAR MONTH NVL(EE.EXPENSE_CLAIM,0)
---------- ---------- ----------
-----------------------
7369 2002 1 0
7369 2002 2 3072.43
7369 2002 3 0
7369 2002 4 30
7369 2002 5 235.03
7369 2002 6 0
7369 2002
7 0
7369 2002 8 0
7369 2002 9 5095.98
7369 2002 10 0
7369 2002 11 0
7369 2002 12 1001.01
7782 2002 1 111.09
7782 2002 2 0
7782 2002 3 9.85
7782
2002 4 0
7782 2002 5 0
7782 2002 6 0
7782 2002 7 3987.32
7782 2002 8 0
7782 2002 9 1200
7782 2002 10 0
7782 2002 11 0
7782 2002 12 0
上面那种写法我们也可以写成,下面这样(把分别每个员工在2002年各月份EXPENSE_CLAIM取出,再连接起来):
SELECT NVL(ee.emp_id, 7369), m.year,
m.month, NVL(ee.expense_claim,0)
FROM (SELECT * FROM months WHERE year =
2002) m
LEFT OUTER JOIN (SELECT *
FROM employee_expense
WHERE emp_id = 7369) ee
ON m.year = ee.year AND m.month = ee.month
ORDER BY m.month
UNION ALL
SELECT NVL(ee.emp_id, 7782), m.year,
m.month, NVL(ee.expense_claim,0)
FROM (SELECT * FROM months WHERE year =
2002) m
LEFT
OUTER JOIN (SELECT *
FROM employee_expense
WHERE emp_id = 7782) ee
ON m.year = ee.year AND m.month = ee.month
ORDER BY m.month;本文出自 “感性V理性” 博客,请务必保留此出处http://longsoft.blog.51cto.com/378540/82040
Partition outer
joins 是Oracle10g中令人感兴趣的的特性。它可以将数据分成组,句体我也说不清,看了下面的例子你就明白了:
(表employee_expanse)
SELECT * FROM employee_expense;
EMP_ID
YEAR MONTH EXPENSE_CLAIM
APPROVED_AMT PAID_DATE
---------- ---------- ----------
------------- ------------ ---------
7369
2002 2 3072.43 3072.43 03-MAR-02
7369
2002 4 30 30 01-JUN-02
7369
2002 5 235.03 35.03 01-JUN-02
7369
2002 9 5095.98 5095.08 31-OCT-02
7369
2002 12 1001.01 1001.01 01-FEB-03
7782
2002 1 111.09 111.09 01-FEB-02
7782
2002 3 9.85 9.85 01-APR-02
7782
2002 7 3987.32 3987.32 01-AUG-02
7782
2002 9 1200 1200 01-OCT-02
(表months)
SELECT * FROM months WHERE year = 2002;
YEAR MONTH
---------- ----------
2002 1
2002 2
2002 3
2002 4
2002 5
2002 6
2002 7
2002 8
2002 9
2002 10
2002 11 2002
12
你可以用month表中的反回的12行,做一个left outer join 把某个员工(employee)每月的expense显示出来:
SELECT NVL(ee.emp_id, 7782), m.year,
m.month, NVL(ee.expense_claim,0)
FROM (SELECT * FROM months WHERE year =
2002) m
LEFT OUTER JOIN (SELECT *
FROM employee_expense
WHERE emp_id = 7782) ee
ON m.year = ee.year AND m.month = ee.month
ORDER BY m.month;
(NVL(value,0)该函数的意思是当value的值为空时,以0代替)
NVL(EE.EMP_ID,7782) YEAR
MONTH NVL(EE.EXPENSE_CLAIM,0)
------------------- ---------- ----------
-----------------------
7782 2002 1 111.09
7782
2002 2 0
7782 2002 3 9.85
7782 2002 4 0
7782 2002 5 0
7782 2002 6 0
7782 2002 7 3987.32
7782 2002 8 0
7782 2002 9 1200
7782 2002 10 0
7782 2002 11 0
我们可以看到emp_id 为 7782的员工在2002今天各个月份的EXPENSE_CLAIM 被显示出来了,那么如果我人要显示每个员工的在2002今天各个月份的EXPENSE_CLAIM么怎么办,那么Partition Outer Joins 就起作用了:
SELECT ee.emp_id, m.year, m.month,
NVL(ee.expense_claim,0)
FROM (SELECT * FROM months WHERE year =
2002) m
LEFT OUTER JOIN employee_expense ee
PARTITION BY (ee.emp_id)
ON m.year = ee.year AND m.month = ee.month
ORDER BY ee.emp_id, m.month;
EMP_ID YEAR MONTH NVL(EE.EXPENSE_CLAIM,0)
---------- ---------- ----------
-----------------------
7369 2002 1 0
7369 2002 2 3072.43
7369 2002 3 0
7369 2002 4 30
7369 2002 5 235.03
7369 2002 6 0
7369 2002
7 0
7369 2002 8 0
7369 2002 9 5095.98
7369 2002 10 0
7369 2002 11 0
7369 2002 12 1001.01
7782 2002 1 111.09
7782 2002 2 0
7782 2002 3 9.85
7782
2002 4 0
7782 2002 5 0
7782 2002 6 0
7782 2002 7 3987.32
7782 2002 8 0
7782 2002 9 1200
7782 2002 10 0
7782 2002 11 0
7782 2002 12 0
上面那种写法我们也可以写成,下面这样(把分别每个员工在2002年各月份EXPENSE_CLAIM取出,再连接起来):
SELECT NVL(ee.emp_id, 7369), m.year,
m.month, NVL(ee.expense_claim,0)
FROM (SELECT * FROM months WHERE year =
2002) m
LEFT OUTER JOIN (SELECT *
FROM employee_expense
WHERE emp_id = 7369) ee
ON m.year = ee.year AND m.month = ee.month
ORDER BY m.month
UNION ALL
SELECT NVL(ee.emp_id, 7782), m.year,
m.month, NVL(ee.expense_claim,0)
FROM (SELECT * FROM months WHERE year =
2002) m
LEFT
OUTER JOIN (SELECT *
FROM employee_expense
WHERE emp_id = 7782) ee
ON m.year = ee.year AND m.month = ee.month
ORDER BY m.month;本文出自 “感性V理性” 博客,请务必保留此出处http://longsoft.blog.51cto.com/378540/82040
相关文章推荐
- web2.0是什么,现在好象很热的样子,他和web1.0有什么区别
- 建站有很多技术,如 HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、http://ASP.NET、Web Services、浏览器脚本、服务器脚本等。它们的区别是什么?新手一点不懂,想理清所有这些技术之间的关系和应用范围。
- 程序员在互联网公司和传统软件公司工作,有什么区别?
- 时髦的互联网公司都在用什么技术?
- 互联网企业应该靠什么技术发展
- 什么是NFC技术?NFC和RFID、红外、蓝牙有什么区别?
- WEB2.0赐予中国互联网什么力量
- 互联网中一些技术基本概念以及之间的联系与区别
- 科技互联网中,现如今什么技术最火?
- 移动,联通,电信三家4G手机技术上有什么区别,TD-LTE和FDD-LTE的区别
- web1.0与web2.0的区别介绍附举例
- 电商等一些互联网项目涉及到什么技术?
- 山寨币,虚拟币,和比特币的区块链技术有什么区别
- web1.0与web2.0的区别
- 网络流量分析 NetFlow是什么 详解 科普 ~互联网业务流量监测技术的应用和设计---perfect
- 互联网企业应该靠什么技术发展
- SAS宏技术中,%let和call symput有什么区别?
- 屌丝程序员和技术大拿的区别是什么?
- 中国移动互联网设置和中国移动WAP设置有什么区别?
- 科技互联网中,现如今什么技术最火?