MySQLロールアップ機能のNULLカテゴリタイトルを置き換えるにはどうすればよいですか?
質問
以下のMySQLクエリを使用して、ピボットテーブルを作成しました。これは、まさに探しているものです。ただし、null値を、サブテルや壮大なものなどの実際の説明に置き換えたいと思います。 PHP出力に表示されるピボットテーブル形式は次のとおりです(フォーマットがやや読みやすいことを願っています!)。
Name Division 1 Division 2 Division 3 Division 4 Location
Name 1
Name 2
Name 3
NULL Total Total Total Total
Name 4
Name 5
NULL Total etc
NULL Column Grand Total
これが私がテーブルを生成するために使用したクエリです。この問題を調査した後、ケース関数が進むべき方法のようです。ただし、2つのケースラインを以下のクエリに追加すると、動作したくないようです。返されるmysql_errorは、「グループ化関数は存在しない」と言っています。
SELECT
CASE WHEN (GROUPING(name)=1) THEN 'MainTotal' ELSE name END AS name,
CASE WHEN (GROUPING(location)=1) THEN 'SubTotal' ELSE location END AS location,
name AS Name,
SUM(IF(division='OEM',totalHours,NULL)) AS OEM,
SUM(IF(division='A/M',totalHours,NULL)) AS AM,
SUM(IF(division='SKF',totalHours,NULL)) AS SKF,
SUM(IF(division='RE',totalHours,NULL)) AS RE,
location as Location
FROM $databasetable GROUP BY location, name
WITH ROLLUP
誰かが私が間違っていることを教えてもらえますか?ケース関数は、Nullカテゴリタイトルを置き換える方法ですか?
前もって感謝します!
解決
このように試してみてください:
SELECT
IFNULL(name, 'MainTotal') AS name,
IFNULL(location, 'SubTotal') AS location,
SUM(IF(division='OEM',totalHours,NULL)) AS OEM,
SUM(IF(division='A/M',totalHours,NULL)) AS AM,
SUM(IF(division='SKF',totalHours,NULL)) AS SKF,
SUM(IF(division='RE',totalHours,NULL)) AS RE,
location as Location
FROM $databasetable GROUP BY location, name
WITH ROLLUP
他のヒント
この時点でこの質問はかなり古いことを知っていますが、結果は、Googleを「ロールアップラベルを使用したMySQL」を検索するときに最初に返されます。
あなたの応答はを使用します grouping()
MySQLの一部ではないが、問題を解決するための同様の方法があります。
実行後のクエリから出力を調整しないようにしようとしていると思います。
以下を試してください:
SELECT
CASE
WHEN [column1 grouped by] IS NULL THEN "Total"
ELSE [column1]
END AS `[alias]`,
CASE
WHEN [column1 grouped by] IS NULL THEN "---"
ELSE [column2]
END AS `[alias2]`,
SUM(IF([condition1] = [variable], [sum column], 0)) as `[alias3]`
...
FROM [table]
GROUP BY [column1] WITH ROLLUP
ここのロジックは、列でグループ化されたnull値を置き換えます。 ROLLUP
. 。ロールアップによって集計されていない追加の列は、ロールアップの合計を除く、クエリによって返される最後の行にデフォルトでデフォルトです。これを回避するために、ケースを使用して、列ごとにグループがnullかどうかを確認し、選択した列値をケースリターンを介して希望するものとして置き換えます。
サブトタールを実行する必要がある場合は、同じロジックを使用しますが、クエリの個別のインスタンスを設定し、 UNION
それらを一緒にピボットテーブルを形成します。