使用DB2 UDB OLAP函数
2008-09-03 16:28:17 来源:WEB开发网createTABLENUMBER_SEQ(NUMINTNOTNULL);
insertINTONUMBER_SEQselectROW_NUMBER()OVER()FROM
SYSCAT.COLUMNS;
从 1 开始的连续数将被插入到表 NUMBER_SEQ 中,在系统视图 SYSCAT.COLUMNS 中,每个数字对应一行(我选择了 SYSCAT.COLUMNS,是因为它出现在每个数据库中,并且总是有 1,000 多行。您可以使用任何表,只要这个表有足够多(但不要太多)的记录)。在 NUMBER_SEQ 中会有 SYSCAT.COLUMNS 表中那么多的行:
selectMIN(NUM)ASMIN_NUM,MAX(NUM)ASMAX_NUM,count(*)ASNUM_RECFROMNUMBER_SEQ
MIN_NUM MAX_NUM NUM_REC
---------------------------------
1 3197 3197
1record(s)selected.
使用连续日期来填充一个日历表很容易:
createTABLEDATE_SEQ(SOME_DATEDATENOTNULL);
insertINTODATE_SEQselectDATE(’01/01/2003’)+(ROW_NUMBER()
OVER()-1)DAYSFROMSYSCAT.COLUMNS;
我们已经看到了如何使用 OLAP 函数 ROW_NUMBER() 来创建和填充辅助表。显然,有两种方法可以完成这一任务。例如,我们可以使用递归或者在一个循环中插入记录。在这种解决方案中,使用 ROW_NUMBER 的最大好处是简化了编程。
在接下来的三章中,我们将使用 NUMBER_SEQ 和 DATE_SEQ 这两个辅助表来简化某些本来比较复杂的查询。
使用顺序表打印发票
假设我们需要存储某杂货店一条收银线上的所有销售额。还需要能够打印任何一笔买卖的发票,像这样:
ITEM_NAME PRICE_PER_ITEM
------------------------------------------------------
NESCAFECLASSIC +6.49000000000000E+000
ENGLISHBAGELS6-PACK +1.49000000000000E+000
ENGLISHBAGELS6-PACK +1.49000000000000E+000
更多精彩
赞助商链接