MySQL - 行を列に変換する
P粉538462187
P粉538462187 2023-10-13 11:50:31
0
1
618

投稿を検索しようとしましたが、SQL Server/Access のソリューションしか見つかりませんでした。 MySQL (5.X) での解決策が必要です。

ホスト ID、項目名、項目値の 3 つの列を持つテーブル (履歴と呼ばれる) があります。

選択 (select * from History) を実行すると、

が返されます。 リーリー

データベースにクエリを実行して同様のコンテンツを返す方法

リーリー


P粉538462187
P粉538462187

全員に返信(1)
P粉920199761

この問題を解決する手順について、さらに詳しく説明を追加します。長すぎる場合は申し訳ありません。


あなたが示した基礎から始めて、それを使用して、この記事の残りの部分で使用するいくつかの用語を定義します。これは ベーステーブル :

になります。 リーリー

これが私たちの目標です、美しいピボット テーブル:

リーリー

history.hostid 列の値は、ピボット テーブルの y 値になります。 history.itemname 列の値は x-values になります (理由は明白です)。


ピボット テーブルの作成の問題を解決する必要がある場合、私は 3 つのステップのプロセスを使用して問題を解決します (オプションの 4 番目のステップもあり):

  1. 対象の列、つまり y 値 および x 値
  2. を選択します。
  3. 追加の列でベース テーブルを拡張します - x 値ごとに 1 つの列
  4. 拡張テーブルをグループ化して集計します -
  5. y 値ごとに 1 つのセット (オプション)集計テーブルを美しくする
  6. これらの手順を問題に適用して、結果を確認してみましょう:

ステップ 1: 対象の列を選択します

。望ましい結果では、hostidy 値 を提供し、itemnamex 値 を提供します。

ステップ 2: 追加の列でベース テーブル

を拡張します。通常、x 値ごとに 1 つの列が必要です。 x 値列が itemname: であることを思い出してください。 リーリー 行数は変更していないことに注意してください。列を追加しただけです。

NULL

のパターンにも注意してください。itemname = "A" の行には、新しい列 A に null 以外の値があり、他の新しい列には null 以外の値が含まれています。ヌル値。

ステップ 3: 拡張テーブルをグループ化して集計します

。 y 値を提供するため、hostid による grouping が必要です: リーリー

(y 値ごとに 1 つの行があることに注意してください。)

さて、もうすぐ到着です。醜い NULL を取り除く必要があるだけです。

ステップ 4: 美化

。結果セットの見栄えを良くするために、null 値をゼロに置き換えます。 リーリー これで完了です – MySQL を使用して美しいピボット テーブルを構築しました。

このプロセスを適用する際の注意点:

追加の列で使用する値。この例では
    itemvalue
  • を使用しました 追加の列で使用する「中立」値。ここでは
  • NULL
  • を使用しましたが、状況に応じて 0 または "" を使用することもできます。 グループ化するときに使用する集計関数。 sum
  • を使用しましたが、
  • countmax もよく使用されます (max は単一の行を作成するときによく使用されます)。行オブジェクト") 複数の列を使用して y 値を表します。この解決策は、y 値に単一の列を使用することに限定されません。追加の列を group by
  • 句に挿入するだけです (そして、それらを
  • select することを忘れないでください) 既知の制限事項:

このソリューションでは、ピボット テーブルに n 列を使用できません。ベース テーブルを拡張するときに、各ピボット列を手動で追加する必要があります。したがって、5 または 10 x の値の場合、この解決策は問題ありません。 100元、あまり良くありません。ストアド プロシージャを使用してクエリを生成する解決策はいくつかありますが、それらは見苦しく、正しく実行するのが困難です。ピボットテーブルに多くの列が必要な場合に、この問題を解決する良い方法は現時点ではわかりません。

    いいねを押す +0
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!