posts - 176, comments - 240, trackbacks - 0, articles - 7

          交叉表(Cross Table)的基本特點(diǎn)是具有橫縱兩個(gè)自由延展的維度,而平面表結(jié)構(gòu)只有一個(gè)可延展的維度,因?yàn)槠矫姹淼牧忻土袛?shù)是確定的。例如,地區(qū)的產(chǎn)品銷(xiāo)售數(shù)量,在平面表中表達(dá)為
          district_id product_id sell_num
          如果表現(xiàn)為交叉表,則為
                     productA  productB
          districtA   sellNum   sellNum
          districtB   sellNum   sellNum
          這種結(jié)構(gòu)上的失配需要通過(guò)程序邏輯來(lái)進(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è)诔绦蛑型ㄟ^(guò)JoinBuilder來(lái)實(shí)現(xiàn)橫向維度的構(gòu)造
          JoinBuilder.begin(sqlInfoA)
                     .join(sqlInfB)
                     .leftJoin(sqlInfoC)
                     .end();
          生成的sql語(yǔ)句示例如下
          select sqlInfoA.fieldNames, sqlInfoB.fieldNames
          from sqlInfoA.sql join sqlInfoB.sql
          on sqlInfoA.keyField = sqlInfoB.keyField

          主站蜘蛛池模板: 台安县| 喜德县| 海门市| 外汇| 平舆县| 那坡县| 驻马店市| 康乐县| 错那县| 封丘县| 天台县| 福泉市| 东港市| 遂宁市| 林芝县| 汤原县| 平舆县| 个旧市| 达拉特旗| 嘉义市| 富蕴县| 股票| 安徽省| 兴业县| 屯昌县| 志丹县| 荥阳市| 杭州市| 贺州市| 林甸县| 嘉义市| 禹城市| 延庆县| 乐昌市| 徐州市| 汶川县| 克什克腾旗| 中牟县| 鹰潭市| 理塘县| 同德县|