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

          [導入]交叉表:平面表的并置

          Posted on 2005-11-19 11:02 canonical 閱讀(311) 評論(0)  編輯  收藏 所屬分類: Witrix開發平臺

          交叉表(Cross Table)的基本特點是具有橫縱兩個自由延展的維度,而平面表結構只有一個可延展的維度,因為平面表的列名和列數是確定的。例如,地區的產品銷售數量,在平面表中表達為
          district_id product_id sell_num
          如果表現為交叉表,則為
                     productA  productB
          districtA   sellNum   sellNum
          districtB   sellNum   sellNum
          這種結構上的失配需要通過程序邏輯來進行調整。

          注意到平面表結構只具有一個可延展的維度,而join可以看作是該維度上的連接操作。因此我們可以將交叉表看作是多個簡單平面表結構并置的結果。即分解為
          A:        
                     productA
          districtA   sellNum
          districtB   sellNum

          B:
                     productB
          districtA   sellNum
          districtB   sellNum

          橫向維度的擴展在程序中表達。

          SqlInfo結構封裝了這種簡單平面表的分解片斷。
          class SqlInfo{
              List fieldNames;
              SQL sql;
              String keyField;
          }

          我們在程序中通過JoinBuilder來實現橫向維度的構造
          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

          主站蜘蛛池模板: 恩平市| 奉新县| 延津县| 伊宁市| 宜春市| 大丰市| 清涧县| 海盐县| 安仁县| 曲松县| 郴州市| 巴彦淖尔市| 丹棱县| 竹山县| 大石桥市| 长宁区| 金山区| 喀喇| 宁津县| 当涂县| 张家界市| 来安县| 海丰县| 东宁县| 大足县| 阳曲县| 汝南县| 沽源县| 石城县| 泸州市| 新绛县| 呼伦贝尔市| 鄂托克前旗| 阿城市| 泸溪县| 海安县| 开封市| 五莲县| 内乡县| 桃源县| 肃北|