<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大大毛 的筆記

      DDM's Note

    哪怕沒有辦法一定有說法,
    就算沒有鴿子一定有烏鴉,
    固執無罪 夢想有價,
    讓他們驚訝.

    posts - 14, comments - 23, trackbacks - 0, articles - 58
       :: 首頁 ::  :: 聯系 ::  :: 管理

    分類小計的實現

    Posted on 2007-05-04 11:52 大大毛 閱讀(338) 評論(0)  編輯  收藏 所屬分類: SQL

    問題:

    ??????分類小計的情況很多,通常情況下我們可能會在SQL的外部來實現分類小計,但是相比直接使用SQL得到滿意的結果集來說效率上就會差太多,現在就來解決它好了。先看表結構:
    ?
    表結構及示例數據
    ??????可以看到這3個層表現出的是一個3層的結構,tbCategory 是第一層代表大的類別 tbType 是第二層代表出版物的類型 tbBook 是最下一層,現在我們想要實現分類匯總,需要實現下面的效果:
    效果表:
    名稱 金額 數量
    生物 118.4 3
    ??印刷品 113.4 2
    ????昆蟲學 23.5 1
    ????海洋生物探索 89.9 1
    ??電子書 5 1
    ????昆蟲學 5 1
    ??????從這張效果表可以看到,我們需要對數據分類匯總才能實現如上表的效果。


    解決:

    ??????平時如果只是2層的關係,直接在SQL語句中實現 Group By 關鍵字即可以實現,但是現在的3層呢?答案是相同的,只是需要將2次匯總的結果集 Union 就好,下面將步驟分解來看:
    ??????1. 我們先對類別實施匯總
    Select
    ????????cID,
    Sum (price)? as ?price, Count ( * )? as ?bookCount
    ????
    From
    ?
    ????????tbBook
    ????
    Group ? By

    ????????cID
    ??????2. 我們再對出版物的類別匯總
    Select
    ????????cID,tID,
    Sum (price)? as ?price, Count ( * )? as ?bookCount
    ????
    From

    ????????tbBook
    ????
    Group ? By
    ????????cID,tID
    ??????3. 將上面兩條 SQL Union
    Select
    ????????cID,
    '' ? as ?tID, Sum (price)? as ?price, Count ( * )? as ?bookCount
    ????
    From
    ?
    ????????tbBook
    ????
    Group ? By

    ????????cID
    Union
    Select
    ????????cID,tID,
    Sum (price)? as ?price, Count ( * )? as ?bookCount
    ????
    From

    ????????tbBook
    ????
    Group ? By
    ????????cID,tID
    Order ? By
    ????cID,tID
    ??????出來的結果是這樣:
    cID tID price bookCount
    1 0 118.4 3
    1 1 113.4 2
    1 2 5 1
    2 0 157.8 4
    2 1 136 2
    2 2 21.8 2
    3 0 235.5 3
    3 1 235.5 3
    ??????4. 代入類別名稱和出版物類型的名稱並 Union tbBook表的記錄,得到最終的結果集,為了能夠達到排序的效果,我們會在這一步插入一個標識列,用它來控制顯示的順序:
    Select ? ' 0 ' ? as ?flag,tbBook.cID? as ?cID, min (tbBook.tID)? as ?tID, min (tbCategory.cName)? as ?cName, Sum (price)? as ?price, Count ( * )? as ?bookCount? From ?tbBook? Join ?tbCategory? On ?tbBook.cID = tbCategory.cID? Group ? By ?tbBook.cID
    union

    Select ? ' 1 ' ,tbBook.cID,tbBook.tID, min (tbType.tName), Sum (price)? as ?price, Count ( * )? From ?tbBook? Join ?tbType? On ?tbBook.tID = tbType.tID?? Group ? By ?tbBook.cID,tbBook.tID
    union

    Select ? ' 2 ' ,cID,tID,bName,price, 1 ? From ?tbBook
    Order ? By ?cID,tID,Flag
    ??????這樣即可實現最終的效果了。

    i am ddm

    主站蜘蛛池模板: 亚洲中文字幕日本无线码| 久久亚洲精品无码av| 久久综合AV免费观看| 青青草国产免费国产是公开| 亚洲日韩中文字幕在线播放| 国产在线观看片a免费观看 | 亚洲日韩亚洲另类激情文学| 亚洲一区二区精品视频| 777爽死你无码免费看一二区| 亚洲av无码专区青青草原| 亚洲乱码一区二区三区在线观看| 亚洲美女免费视频| 日韩精品视频在线观看免费| 亚洲欧洲日本天天堂在线观看| 免费一级做a爰片性色毛片| 99久9在线|免费| 一级特黄录像视频免费| 亚洲国产成人手机在线电影bd| 精品亚洲一区二区三区在线播放| 91精品免费久久久久久久久| 亚欧洲精品在线视频免费观看 | 国产99精品一区二区三区免费 | 亚洲高清在线观看| 国产免费啪嗒啪嗒视频看看| 2021在线观看视频精品免费| 久久久WWW成人免费精品| 亚洲一线产品二线产品| 日韩亚洲AV无码一区二区不卡 | 亚洲国产精品无码久久久久久曰| 国内精自视频品线六区免费 | 中文字幕亚洲综合久久男男| 久久亚洲免费视频| 亚洲日韩精品无码专区加勒比| 国产成人精品久久亚洲高清不卡 | 一级毛片免费播放| 亚洲国产精品一区二区三区在线观看 | 中文字幕 亚洲 有码 在线| 亚洲&#228;v永久无码精品天堂久久| 国产精品美女久久久免费| 亚洲精品欧洲精品| www国产亚洲精品久久久日本|