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

使用DB2 UDB OLAP函数

 2008-09-03 16:28:17 来源:WEB开发网   
核心提示: createTABLENUMBER_SEQ(NUMINTNOTNULL);insertINTONUMBER_SEQselectROW_NUMBER()OVER()FROMSYSCAT.COLUMNS;从 1 开始的连续数将被插入到表 NUMBER_SEQ 中,在系统视图 SYSCAT.CO

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

上一页  1 2 3 4 5 6 7  下一页

Tags:使用 DB UDB

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