WEB开发网
开发学院数据库DB2 使用DB2 UDB OLAP函数 阅读

使用DB2 UDB OLAP函数

 2008-09-03 16:28:17 来源:WEB开发网   
核心提示: 同样,如果理解了如何联结 GUEST 和 ROOM 表中的记录,使用DB2 UDB OLAP函数(10),就可以通过一条简单的 insert 语句填充 GUEST_ASSIGNMENT 表,这种方法显然比迭代客人上的游标和房间上的游标要容易得多,不过,如果使用 OLAP 函数, 使用累加和

同样,如果理解了如何联结 GUEST 和 ROOM 表中的记录,就可以通过一条简单的 insert 语句填充 GUEST_ASSIGNMENT 表。这种方法显然比迭代客人上的游标和房间上的游标要容易得多。

使用累加和将货物箱分配给卡车

本章中要讨论的这个问题非常类似于前面的两个问题。这次我将演示累加和是如何简化查询的开发的。

假设需要将一些大小一致的箱子装载到几辆容量不等的卡车上。实际上这是一个非常常见的资源分配问题,这种问题通常使用游标来解决。

下面是表的定义以及一些样本数据:

createTABLETRUCK(
TRUCK_IDINTNOTNULLPRIMARYKEY,
CAPACITYSMALLINTNOTNULL);
insertINTOTRUCKVALUES(11,3),(22,2),(33,3);
createTABLECARGO_BOX(
CARGO_BOX_IDINTNOTNULLPRIMARYKEY,
DESCRIPTIONVARchar(40));
insertINTOCARGO_BOXVALUES(101,’PEACHES’),(102,’POTATOES’),(103,’TOMATOES’),(104,’TOMATOES’),(105,’TOMATOES’),
(106,’PINEAPPLES’),(107,’PINEAPPLES’);
createTABLEBOX_IN_TRUCK(
TRUCK_IDINTNOTNULL,
CARGO_BOX_IDINTNOTNULL,
FOREIGNKEY(TRUCK_ID)REFERENCESTRUCK(TRUCK_ID),
FOREIGNKEY(CARGO_BOX_ID)REFERENCESCARGO_BOX(CARGO_BOX_ID));

问题是恰当地填充 BOX_IN_TRUCK 表,意即将箱子分配给卡车,使得没有卡车超载。通常需要使用游标来完成这一任务。不过,如果使用 OLAP 函数,即使没有游标也能完成这一任务。

insertINTOBOX_IN_TRUCK
select
TRUCK_CUMULATIVE.TRUCK_ID,
CARGO_BOX.CARGO_BOX_ID
FROM
(selectSUM(CAPACITY)OVER(ORDERBYTRUCK_ID)-CAPACITY+1ASBOX_FROM, 
SUM(CAPACITY)OVER(ORDERBYTRUCK_ID)ASBOX_TO,CAPACITY,TRUCK_IDFROMTRUCK)ASTRUCK_CUMULATIVE
join
(selectROW_NUMBER()OVER()ASROW_NUMBER,CARGO_BOX_IDFROMCARGO_BOX)ASCARGO_BOX
ONROW_NUMBERBETWEENBOX_FROMANDBOX_TO;

上一页  5 6 7 8 9 10 

Tags:使用 DB UDB

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接