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