我可以使用'where'子句转置(透视)一个表吗?

时间:2016-09-23 18:07:01

标签: mysql sql pivot

我需要在mysql中从原始表创建一个数据透视表,但我需要具体说明我想将数据带入我正在制作的新表中的哪些行。 我猜我可以在查询中使用'where'子句创建数据透视表,但我不确切知道如何。我有一个代码,允许我从其原始创建一个数据透视表。它选择两行,每个'max'函数对应一行,并将它们转换为列。

create table `transp_table` as
select * from (
    select original_table,
    max(case when ID = 1.01 then value else 0 end) '1.01',
    max(case when ID = 1.02 then value else 0 end) '1.02'
    from(
    select ID, `month_1` value, 1 descrip 
    from disp
    union all
    select ID, `month_2` value, 2 descrip
    from disp
    union all
    select ID, `month_3` value, 3 descrip
    from disp
    union all
    select ID, `month_4` value, 4 descrip 
    from disp
    union all
    select ID, `month_5` value, 5 descrip 
    from disp
    union all
    select ID, `month_6` value, 6 descrip 
    from disp
    union all
    select ID, `month_7` value, 7 descrip 
    from disp
    union all
    select ID, `month_8` value, 8 descrip 
    from original_table
    ) src
    group by descrip
) as `transp_table`;

它适用于创建数据透视表,但对于此模型,我需要为每个特定ID添加“最大”功能。而且从original_table中,有很多行。例如,在original_table中有一个名为'type_of_product'的列,我需要选择其中包含特定字符串的行。有没有一个查询,我可以选择行来制作数据透视表,而不必像上面的例子中那样为每一个键入?这是带有original_table样本的结构:

CREATE TABLE original_table (
  `ID` float not null, `type_of_product` text, `month_1` int, 
    `month_2` int, `month_3` int, `month_4` int, `month_5` int, `month_6` int)

INSERT INTO `original_table` (
 ID, type_of_procduct, `month-1`, `month_2`, `month_3`, `month_4`, `month_5`, `month_6`)
 VALUES 

(1.01, 'TV', 50, 53, 20, 33, 134, 0),

(1.02, 'DVD', 36, 12, 5, 0, 0, 26),

(2.01, 'DVD', 11, 12, 30, 5, 22, 0),

(3.01, 'CD', 0, 0, 3, 1, 0, 19),

(3.02, 'TV', 3, 6, 0, 0, 10, 15),

(3.03, 'TV', 500, 20, 0, 0, 0, 1);

0 个答案:

没有答案