Posted on 2005-11-19 11:02
canonical 閱讀(309)
評論(0) 編輯 收藏 所屬分類:
Witrix開發(fā)平臺
交叉表(Cross Table)的基本特點是具有橫縱兩個自由延展的維度,而平面表結(jié)構(gòu)只有一個可延展的維度,因為平面表的列名和列數(shù)是確定的。例如,地區(qū)的產(chǎn)品銷售數(shù)量,在平面表中表達為
district_id product_id sell_num
如果表現(xiàn)為交叉表,則為
productA productB
districtA sellNum sellNum
districtB sellNum sellNum
這種結(jié)構(gòu)上的失配需要通過程序邏輯來進行調(diào)整。
注意到平面表結(jié)構(gòu)只具有一個可延展的維度,而join可以看作是該維度上的連接操作。因此我們可以將交叉表看作是多個簡單平面表結(jié)構(gòu)并置的結(jié)果。即分解為
A:
productA
districtA sellNum
districtB sellNum
B:
productB
districtA sellNum
districtB sellNum
橫向維度的擴展在程序中表達。
SqlInfo結(jié)構(gòu)封裝了這種簡單平面表的分解片斷。
class SqlInfo{
List fieldNames;
SQL sql;
String keyField;
}
我們在程序中通過JoinBuilder來實現(xiàn)橫向維度的構(gòu)造
JoinBuilder.begin(sqlInfoA)
.join(sqlInfB)
.leftJoin(sqlInfoC)
.end();
生成的sql語句示例如下
select sqlInfoA.fieldNames, sqlInfoB.fieldNames
from sqlInfoA.sql join sqlInfoB.sql
on sqlInfoA.keyField = sqlInfoB.keyField