MySQLロールアップ機能のNULLカテゴリタイトルを置き換えるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/6822666

  •  26-10-2019
  •  | 
  •  

質問

以下の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 それらを一緒にピボットテーブルを形成します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top