重新定义表,将旧值作为新表的列名

时间:2012-08-16 12:28:46

标签: mysql

我正在寻找一个允许我使用相同ID“展平”行的查询:

  • 第二列中的值用作新表列名称
  • 第三列中的值确定新表中的值。

举个例子:

表格如下所示。

ID       year     event
------------------------
Guid1    2005     A
Guid1    2010     B
Guid2    2020     C

我希望它看起来像..

ID       2005      2010     2020
Guid1    A         B        
Guid2                       C

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

我认为(id,year)组合是独一无二的?否则不确定您期望的输出。如果是唯一的,它看起来像这样:

SELECT
  id,
  MIN(IF(year = 2005, event, NULL)) AS '2005',
  MIN(IF(year = 2010, event, NULL)) AS '2010',
  MIN(IF(year = 2020, event, NULL)) AS '2020'
FROM
  t
GROUP BY
  id

以上意味着您必须为每个所需年份重复一次MIN(IF(...))语句。 SQL中没有办法自动执行此操作:SQL不会混合数据和元数据。您无法在查询中动态指定列。要么使用“*”,要么指定确切的列。