当前位置: 首页 > 面试题库 >

MySQL动态数据透视表

柴彬
2023-03-14
问题内容

我试图获得一个带有动态列的数据透视表。当user_id是一个字符串时,它可以正常工作,但是如果它是一个int,那么它似乎会失败

到目前为止,在过去的问题帮助下,我得到的是:

CREATE TABLE measure2
    (`inspection_date` date, `user_id` int, `score` int, comment text)
;

INSERT INTO measure2
    (`inspection_date`, `user_id`, `score`, comment)
VALUES
    ('2012-10-16', 0, 0, null),
    ('2012-10-16', 1, 0, null),
    ('2012-10-16', 2, 0, null),
    ('2012-10-16', 3, 0, null),
    ('2012-10-17', 0, 1, null),
    ('2012-10-17', 1, 1, null),
    ('2012-10-17', 2, 1, null),
    ('2012-10-18', 3, 1, null)
;


SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when user_id = ''',
      user_id,
      ''' then score end) AS ',
      user_id
    )
  ) INTO @sql
FROM  measure2;

SET @sql = CONCAT('SELECT inspection_date, ', @sql, '
                  FROM measure2
                  GROUP BY inspection_date');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

参见:http :
//sqlfiddle.com/#!2/eab24/1

我确定这很简单,但是我想念什么呢?

谢谢


问题答案:

由于值在int其中,因此您要将它们设为列名,因此必须将值包装在反引号中

该SQL将看起来像:

max(case when user_id = 1 then score end) as `1`

完整的查询将是:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when user_id = ''',
      user_id,
      ''' then score end) AS `',
      user_id, '`'
    )
  ) INTO @sql
FROM  measure2;

SET @sql = CONCAT('SELECT inspection_date, ', @sql, ' 
                  FROM measure2 
                  GROUP BY inspection_date');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

参见带有演示的SQL Fiddle



 类似资料:
  • 问题内容: 我已经尽力理解如何在SQL中创建数据透视表,但是我无法对其进行管理! 我有以下几列: 拥有60万行数据。 我在下面的数据透视表中需要它们; StartHour作为列标题 作为行标题 作为数据 其中=‘1’作为过滤器。 数据透视表 我设法获得了以下代码,该方法有效,但仅给我date_1作为列标题,而不给我StartHour,或者将filter作为date_source =‘1’。 谢谢你

  • 问题内容: 以下查询执行得很好… 输出看起来像 但是我的疑问是如何获取列的动态字段值。 那是 , 如何使用以上查询 问题答案: 要使PIVOT动态,您必须编写一个存储过程。 然后,您可以这样称呼它:

  • 好的,我有一张像这样的桌子 现在我需要把它变成这样: 我一直在查看动态枢轴示例,但似乎我无法将它们放入我的场景中。 有人能帮忙吗?

  • 问题内容: 我找到了一个不错的脚本,该脚本可以为透视表动态按列名创建,但是我没有将分配的值重新返回到表中。这是我的出发桌。 我运行此SQL生成我想要的数据透视表中的列 这给了我以下输出 当我为数据透视表运行动态SQL时 我看到这个结果… 我尝试了几种不同的方法,但是对于这种方法为什么不起作用,我没有提出解决方案。 所需的输出将是ORDER_ID列顺序正确的位置 但这也将对我的应用程序起作用。 问题

  • 假设我有三个不同的MySQL表: 表: 表: 表: 我想要得到一个表,合作伙伴在行和产品作为列。到目前为止,我能够得到如下输出: 使用此查询: 但我更想要这样的东西: 问题是,我无法告诉我将拥有多少个产品,因此需要根据products表中的行动态更改列号。 这个很好的答案似乎并不适用于MySQL:T-SQL Pivot?从行值创建表列的可能性

  • 问题内容: 可以说我有三个不同的MySQL表: 表: 表: 表: 我想得到一个表格,其中行和产品列为合作伙伴。到目前为止,我已经能够获得如下输出: 使用此查询: 但我想改成这样: 问题是我无法知道我将拥有多少个产品,因此列号需要根据产品表中的行动态更改。 这个很好的答案似乎不适用于mysql:T-SQL Pivot吗?根据行值创建表格列的可能性 问题答案: 不幸的是,MySQL没有您基本上想做的功