代码之家  ›  专栏  ›  技术社区  ›  Midhat

MySQL中的数据转换

  •  0
  • Midhat  · 技术社区  · 15 年前

    我有下表

    ID1 ID2 Type
    1   x   A
    1   y   A
    1   z   B
    .
    .
    .
    

    我想把它变成这样

    ID1 A   B
    1   x,y z
    

    知道怎么做吗

    我所能得到的最好的结果是两行,一行是A值,一行是B值,使用group concat(id2)和group by ID1,键入

    1 回复  |  直到 15 年前
        1
  •  2
  •   Martin    15 年前

    我可以把它降到一行,但是要用额外的逗号:-(

    select ID1, 
           group_concat( if( `Type` = 'A', ID2, '') ) A, 
           group_concat( if( `Type` = 'B', ID2, '') ) B
    from tab
    group by ID1
    

    给予:

    +------+------+------+
    | ID1  | A    | B    |
    +------+------+------+
    | 1    | x,y, | ,,z  |
    +------+------+------+
    

    提供NULL而不是“”可修复此问题:

    select ID1, 
           group_concat( if( `Type`='A', ID2, NULL)) A, 
           group_concat( if(`Type`='B', ID2, NULL)) B
    from tab
    group by ID1;
    

    给予:

    +------+------+------+
    | ID1  | A    | B    |
    +------+------+------+
    | 1    | x,y  | z    |
    +------+------+------+