Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在html中以特定格式显示sql数据_Html_Mysql_Sql_Pivot Table - Fatal编程技术网

如何在html中以特定格式显示sql数据

如何在html中以特定格式显示sql数据,html,mysql,sql,pivot-table,Html,Mysql,Sql,Pivot Table,我在Mysql中有以下格式的数据: name sub ---------------- a maths a science a history b maths b science a computer a english c computer c history b history c maths 我计划以HTML格式显示此数据: Name maths

我在Mysql中有以下格式的数据:

   name sub
----------------
    a   maths
    a   science
    a   history
    b   maths
    b   science
    a   computer
    a   english
    c   computer
    c   history
    b   history
    c   maths
我计划以HTML格式显示此数据:

Name    maths   science history computer  english
a          y        y       y       y         y
b          y        y       y       n         n
c          y        n       y       y         n

如何制定除透视表方法之外的sql查询?

您可以在sql中使用条件聚合:


您可以在SQL中使用条件聚合:


如果要动态创建列,可以使用动态透视

使用GROUP_CONCAT创建透视列,然后使用SQL执行语法,动态执行它

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'COALESCE(MAX(CASE WHEN sub = ''',
      sub,
      ''' then ''y'' end),''n'') AS ',
      sub
    )
  ) INTO @sql
FROM T;

SET @sql = CONCAT('SELECT name, ', @sql, ' 
                  FROM T 
                  GROUP BY name');

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


如果要动态创建列,可以使用动态透视

使用GROUP_CONCAT创建透视列,然后使用SQL执行语法,动态执行它

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'COALESCE(MAX(CASE WHEN sub = ''',
      sub,
      ''' then ''y'' end),''n'') AS ',
      sub
    )
  ) INTO @sql
FROM T;

SET @sql = CONCAT('SELECT name, ', @sql, ' 
                  FROM T 
                  GROUP BY name');

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


我在这里发现了一个类似的案例。让我简单介绍一下问题和解决方案:

问题:

将其转换为:

为此:

解决方案:

从这篇文章中,作者采取了以下步骤:

选择感兴趣的列,即y值和x值 用额外的列扩展基表-每个x值一列 分组并聚合扩展表-每个y值一组 可选对聚合表进行修饰 全文如下:

希望能有帮助


关于,

我在这里发现了一个类似的案例。让我简单介绍一下问题和解决方案:

问题:

将其转换为:

为此:

解决方案:

从这篇文章中,作者采取了以下步骤:

选择感兴趣的列,即y值和x值 用额外的列扩展基表-每个x值一列 分组并聚合扩展表-每个y值一组 可选对聚合表进行修饰 全文如下:

希望能有帮助


关于,你提到了html。大概,您有一个将原始数据转录成html的层。如果是我,我会处理缺少结果的逻辑和表格,你提到html。大概,您有一个将原始数据转录成html的层。如果是我,我会处理缺少结果的逻辑和表格。如何使用另一列的Y或N值,而不是硬编码。@qwww其他表中是否包含该值?您可以使用动态sql获取值。相同的表..但不同column@qwww但是你怎么知道哪个州意味着哪个值呢?在本例中,您如何知道是否存在get sub mean Y else N如何使用另一列中的Y或N值,而不是硬编码。@qwww是其他表中包含的值?您可以使用动态sql获取值。相同的表..但不同column@qwww但是你怎么知道哪个州意味着哪个值呢?在这个例子中,你怎么知道如果有子均值Y或者n如果主题的数量是动态的呢?如果主题的数量是动态的呢?
   name   maths science history computer    english
    a       y       y       y     y          y
    b       y       y       y     n          n
    c       y       n       y     y          n
select * from history;

+--------+----------+-----------+
| hostid | itemname | itemvalue |
+--------+----------+-----------+
|      1 | A        |        10 |
|      1 | B        |         3 |
|      2 | A        |         9 |
|      2 | C        |        40 |
+--------+----------+-----------+
select * from history_itemvalue_pivot;

+--------+------+------+------+
| hostid | A    | B    | C    |
+--------+------+------+------+
|      1 |   10 |    3 |    0 |
|      2 |    9 |    0 |   40 |
+--------+------+------+------+