使用DB2 UDB OLAP函数
2008-09-03 16:28:17 来源:WEB开发网如果使用 OLAP 函数 ROW_NUMBER() ,就不需要打开两个游标并迭代房间和客人。相反,我们可以简单地联结这两个表,并在房间与客人之间取得 1 对 1 的对应关系。为了理解其工作原理,让我们首先看看这个选择查询及其输出:
selectROOM_NUMBER,GUEST_NUMBER,ROOM_ID,GUEST_ID
FROM
(selectROW_NUMBER()OVER(ORDERBYROOM_ID)ASROOM_NUMBER,ROOM_IDFROMROOM)ASR
join
(selectROW_NUMBER()OVER(ORDERBYGUEST_ID)ASGUEST_NUMBER,GUEST_IDFROMGUEST)ASG
ONROOM_NUMBER=GUEST_NUMBER
ROOM_NUMBER GUEST_NUMBER ROOM_ID GUEST_ID
--------------------------------------------------------------
1 1 121 2
2 2 139 17
3 3 142 57
4 4 201 91
5 5 202 321
这个例子查询将 ROOM 表中的最多一条记录与 GUEST 表中的最多一条记录相联结。注意,您可以不像我那样指定排序(OVER(ORDER BY GUEST_ID)),而是宣称排序不重要(OVER()),甚至请求使用随机排序(OVER(ORDER BY RAND()))。在这种情况下,一个客人得不到一个房间,因为没有足够的空房间。可以随意添加记录到 ROOM 表中,以检验该查询在其他情况下(例如有客人那么多的房间,或者没有客人那么多的房间)的工作情况。
如果理解了联结的工作原理,填充 GUEST_ASSIGNMENT 表就比较容易了:
更多精彩
赞助商链接