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 回答