使用DB2 UDB OLAP函数
2008-09-03 16:28:17 来源:WEB开发网注意:在不相等的条件下,联结两个表是完全合法的,像这个例子中就是如此。
如前一章所述,我们也可以通过使用递归来得到所需的结果。在某些情况下,递归或许更加有效。不过,使用了顺序表的代码看上去更简单,更易于理解,并且不必为避免可能由递归招致的无限循环而担忧。因此,在这种情况下,比起使用递归来,使用 ROW_NUMBER 是一种简单的替代方法。
如果不能创建辅助表,那么使用表表达式并生成连续数会比较容易,像这样:
selectITEM_NAME,PRICE_PER_ITEMFROMSALE_ITEM
join
(selectROW_NUMBER()OVER()ASNUMFROMSYSCAT.TABLES)ASNUMBER_SEQ
ONNUMBER_SEQ.NUM<=SALE_ITEM.ITEM_QUANTITY
ORDERBYPRICE_PER_ITEMDESC
结果完全一样,不过性能上慢了一点。
如何使用日历表简化查询
我从 [article on Pivot Tables] 中摘出了这个例子。首先,让我们创建一个表,并插入一些数据:
createTABLEBUSINESS_TRIP(EMPLOYEE_IDINTNOTNULL,DATE_FROMDATENOTNULL,DATE_TODATENOTNULL);
insertINTOBUSINESS_TRIPVALUES
(1,DATE(’01/06/2003’),DATE(’01/10/2003’)),
(1,DATE(’01/13/2003’),DATE(’01/17/2003’)),
(1,DATE(’01/20/2003’),DATE(’01/24/2003’)),
(1,DATE(’01/27/2003’),DATE(’01/31/2003’)),
(2,DATE(’01/07/2003’),DATE(’01/08/2003’)),
(3,DATE(’01/08/2003’),DATE(’01/09/2003’));
假设有一个简单的任务:“选择 2003 年 1 月份没有雇员出差的所有日子”,这时日历表 DATE_SEQ 就很好用了。
更多精彩
赞助商链接