0

行に変換する必要のある無数の列があります。

私には3つの主要なカテゴリ(CAT、ODB、GPA)があります。各カテゴリには月(1月から12月まで)があり、各カテゴリには年があります)構造のサンプルを次に示します。

CATJAN2002 | CATFEB2002 ... | CATDEC2002 ... | ODBJAN2003 ... | GPAMAR2013

vbaでは、このデータを別のテーブルにエクスポートするための単純なループを作成できます。

New_Tableフィールド: ID, TYPE, YEAR, MONTH, VALUE 。テーブルの列を自動的に調べて、新しいテーブルへのデータの入力を開始する方法を見つけるのを手伝ってもらえますか?これはMySQLだけで実行できますか?

最初の列(STORE、ITEM、CUSTOMER)の組み合わせがID(または主キー)であることを忘れてしまいました[SELECT CONCAT(STORE, ITEM, CUSTOMER) AS ID

4

1 に答える 1

2

アイデアは、次のようなクエリを使用することです。

SELECT CONCAT(STORE, ITEM, CUSTOMER) ID,
       'CAT' TYPE, 2002 YEAR, 'JAN' MONTH, CATJAN2002 VALUE
FROM yourtable
UNION ALL
SELECT CONCAT(STORE, ITEM, CUSTOMER) ID,
       'CAT' TYPE, 2002 YEAR, 'FEB' MONTH, CATFEB2002 VALUE
FROM yourtable
UNION ALL
...

そして、次のような動的クエリを使用して作成できます。

SELECT
  GROUP_CONCAT(
  CONCAT(
    'SELECT CONCAT(STORE, ITEM, CUSTOMER) ID,',
    '\'',
    LEFT(column_name, 3),
    '\' TYPE,',
    RIGHT(column_name, 4),
    ' YEAR, \'',
    SUBSTR(column_name, 4, 3),
    '\' MONTH,',
    column_name,
    ' VALUE FROM yourtable')
  SEPARATOR ' UNION ALL ')
FROM information_schema.COLUMNS
where
  table_name = 'yourtable'
  AND (column_name LIKE 'CAT%' OR column_name LIKE 'ODB%' OR column_name LIKE 'GPA%')
INTO @sql;

prepare stm from @sql;
execute stm;

こちらのフィドルをご覧ください。

于 2013-03-26T22:18:52.803 に答える