投稿を検索しようとしましたが、SQL Server/Access のソリューションしか見つかりませんでした。 MySQL (5.X) での解決策が必要です。
ホスト ID、項目名、項目値の 3 つの列を持つテーブル (履歴と呼ばれる) があります。
選択 (select * from History
) を実行すると、
データベースにクエリを実行して同様のコンテンツを返す方法
リーリーP粉9201997612023-10-14 10:02:42
この問題を解決する手順について、さらに詳しく説明を追加します。長すぎる場合は申し訳ありません。
あなたが示した基礎から始めて、それを使用して、この記事の残りの部分で使用するいくつかの用語を定義します。これは ベーステーブル :
になります。 リーリーこれが私たちの目標です、美しいピボット テーブル:
リーリーhistory.hostid
列の値は、ピボット テーブルの y 値になります。 history.itemname
列の値は x-values になります (理由は明白です)。
ピボット テーブルの作成の問題を解決する必要がある場合、私は 3 つのステップのプロセスを使用して問題を解決します (オプションの 4 番目のステップもあり):
。望ましい結果では、hostid は y 値
を提供し、itemname は x 値
を提供します。
を拡張します。通常、x 値ごとに 1 つの列が必要です。 x 値列が itemname: であることを思い出してください。
リーリー
行数は変更していないことに注意してください。列を追加しただけです。
のパターンにも注意してください。itemname = "A"
の行には、新しい列 A
に null 以外の値があり、他の新しい列には null 以外の値が含まれています。ヌル値。
。 y 値を提供するため、hostid による grouping が必要です:
リーリー
さて、もうすぐ到着です。醜い NULL を取り除く必要があるだけです。
。結果セットの見栄えを良くするために、null 値をゼロに置き換えます。 リーリー これで完了です – MySQL を使用して美しいピボット テーブルを構築しました。
このプロセスを適用する際の注意点:
追加の列で使用する値。この例では
を使用しました
追加の列で使用する「中立」値。ここでは 0
または ""
を使用することもできます。
グループ化するときに使用する集計関数。
sum と
max もよく使用されます (
max は単一の行を作成するときによく使用されます)。行オブジェクト")
複数の列を使用して y 値を表します。この解決策は、y 値に単一の列を使用することに限定されません。追加の列を
group by することを忘れないでください)
既知の制限事項:このソリューションでは、ピボット テーブルに n 列を使用できません。ベース テーブルを拡張するときに、各ピボット列を手動で追加する必要があります。したがって、5 または 10 x の値の場合、この解決策は問題ありません。 100元、あまり良くありません。ストアド プロシージャを使用してクエリを生成する解決策はいくつかありますが、それらは見苦しく、正しく実行するのが困難です。ピボットテーブルに多くの列が必要な場合に、この問題を解決する良い方法は現時点ではわかりません。