3

列名をフィールドのデータとして使用して、列をデータ行に変換する必要がある大きなデータ テーブルがいくつかあります。統合ピボット テーブルを使用して Excel でこれを行うことができますが、Excel にはテーブルが大きすぎます。2300 行のデータを持つ 210 列ものものもあれば、20 列と 150,000 行のものもあります。

box.com または Google ドキュメントで表示できるように、サンプルをスプレッドシートにアップロードしました。

https://docs.google.com/spreadsheet/ccc?key=0ArwEcGYwGw7kdHZya2haVDRvZ0xIM0kzRXRHZ2pQM1E

https://www.box.com/s/199ce71828c320472b57

追加情報を追加するために使用される LOGRECNO フィールドと COLUMN ID フィールドを持つ 1 つの大きなテーブルにそれらをすべてマージする前に、SQL コードにマイナーな変更を加えて、25 個のテーブルに対してこれを実行できる繰り返し可能なプロセスを探しています。照会されたときのデータに。

MySQL でこれを行うための最善の方法についてのヘルプをいただければ幸いです。

4

2 に答える 2

1

以下は、最小限の変更で繰り返し可能なプロセスである必要があります。

SET @sql = NULL;
SELECT  GROUP_CONCAT(DISTINCT
    CONCAT('select LOGRECNO, '
      '''',
      COLUMN_NAME,
      ''' col, ', column_name, ' as value from yourtable'
    ) separator '  union all '
  ) INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
where table_name = 'yourtable'
  and column_name <> 'LOGRECNO';

set @sql = CONCAT(@sql, ' Order by 1, 2');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

デモで SQL Fiddle を参照してください

于 2012-11-09T02:46:42.090 に答える
0

これはピボットテーブルの問題です。

これは、高速で動的なソリューションを備えた素晴らしいチュートリアルです:http: //datacharmer.org/downloads/pivot_tables_mysql_5.pdf

于 2012-07-10T13:29:29.793 に答える