2

レポートのクエリを実行しており、ロールアップを使用して合計を取得しています。私の列の 1 つに、最後に重複しているテキスト フィールドがあります。例えば:

SELECT * FROM transactions;

  transNum | itemid | description | qty
 ---------------------------------------
        01 |     01 |    DESC1    |  14
        02 |     01 |    DESC1    |  05
        03 |     01 |    DESC1    |  01
        04 |     02 |    DESC2    |  02
        05 |     02 |    DESC2    |  01
        06 |     02 |    DESC2    |  02
        07 |     03 |    DESC3    |  05
        08 |     03 |    DESC3    |  06
        09 |     03 |    DESC3    |  01

SELECT itemid,description,qty FROM transactions GROUP BY id WITH ROLLUP;

    itemid | description | qty
   ----------------------------
        01 |    DESC1    |  20
        02 |    DESC2    |  05
        03 |    DESC3    |  12
           |    DESC3    |  37

これは大まかな例です。実際のデータは複数のテーブルで構成されています。

ここで、説明フィールドでグループ化していないため、DESC3 が重複していることは理解していますが、これを回避できる機能はありますか?

他のデータベース エンジンには GROUPING 関数があります。これは基本的に必要なものですが、MySQL では必要です。

助けてくれてありがとう

4

3 に答える 3

4

OK、次にこれを試してください:

SELECT a.itemid, b.description, a.total
FROM
    (
        SELECT itemid, sum(qty) as total
        FROM transactions
        GROUP BY itemid WITH ROLLUP
    ) as a
    LEFT JOIN item b ON a.itemid=b.itemid

itemをキーにしたアイテムの説明で名前が付けられたテーブルがあると仮定しますitemid

于 2012-10-17T18:12:36.407 に答える
2

docsから、最後の行の内容を変更する方法はありません。

結果セットには、アプリケーションで識別できるように行のNULL値が含まれています。1st columnrollup

これで遊ぶSQL Fiddleは次のとおりです。http://sqlfiddle.com/#!8/d611d/8

rollupご覧のとおり、行の前の説明が繰り返されます。

于 2012-10-17T18:01:30.853 に答える
0

使用する:case when itemid is null then Total

于 2015-02-25T21:30:47.687 に答える