Posted on 2005-11-19 11:02
canonical 閱讀(308)
評(píng)論(0) 編輯 收藏 所屬分類:
Witrix開發(fā)平臺(tái)
交叉表(Cross Table)的基本特點(diǎn)是具有橫縱兩個(gè)自由延展的維度,而平面表結(jié)構(gòu)只有一個(gè)可延展的維度,因?yàn)槠矫姹淼牧忻土袛?shù)是確定的。例如,地區(qū)的產(chǎn)品銷售數(shù)量,在平面表中表達(dá)為
district_id product_id sell_num
如果表現(xiàn)為交叉表,則為
productA productB
districtA sellNum sellNum
districtB sellNum sellNum
這種結(jié)構(gòu)上的失配需要通過程序邏輯來進(jìn)行調(diào)整。
注意到平面表結(jié)構(gòu)只具有一個(gè)可延展的維度,而join可以看作是該維度上的連接操作。因此我們可以將交叉表看作是多個(gè)簡(jiǎn)單平面表結(jié)構(gòu)并置的結(jié)果。即分解為
A:
productA
districtA sellNum
districtB sellNum
B:
productB
districtA sellNum
districtB sellNum
橫向維度的擴(kuò)展在程序中表達(dá)。
SqlInfo結(jié)構(gòu)封裝了這種簡(jiǎn)單平面表的分解片斷。
class SqlInfo{
List fieldNames;
SQL sql;
String keyField;
}
我們?cè)诔绦蛑型ㄟ^JoinBuilder來實(shí)現(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