Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
Mysql SQL:从2列数据源创建聚合表_Mysql_Sql_Aggregation - Fatal编程技术网

Mysql SQL:从2列数据源创建聚合表

Mysql SQL:从2列数据源创建聚合表,mysql,sql,aggregation,Mysql,Sql,Aggregation,我在数据库中有一个表,我想将其中的问题和答案聚合到一个更可读的数据表中。源表SQL表表示无序集。让我假设您有一个排序列。使用此列,您可以为同一公司的每组行分配一个组,然后使用条件聚合: select max(case when question = 'Company Name' then answer end) as company_name, max(case when question = 'Q1' then answer end) as q1, max(case

我在数据库中有一个表,我想将其中的问题和答案聚合到一个更可读的数据表中。源表SQL表表示无序集。让我假设您有一个排序列。使用此列,您可以为同一公司的每组行分配一个组,然后使用条件聚合:

select max(case when question = 'Company Name' then answer end) as company_name,
       max(case when question = 'Q1' then answer end) as q1,
       max(case when question = 'Q2' then answer end) as q2,
       max(case when question = 'Q3' then answer end) as q3       
from (select t.*,
             sum(case when question = 'Company Name' then 1 else 0 end) over (order by <ordering col>) as grp
      from t
     ) t
group by grp;
请注意,这回答了您提出的问题,其中所有问题都是已知的,因此结果列都是已知的。如果您事先不知道这些问题,则需要使用动态SQL,即将查询构造为字符串,然后执行它。如何做到这一点完全取决于您使用的数据库

编辑:

在MySQL的旧版本中,可以使用子查询:

select max(case when question = 'Company Name' then answer end) as company_name,
       max(case when question = 'Q1' then answer end) as q1,
       max(case when question = 'Q2' then answer end) as q2,
       max(case when question = 'Q3' then answer end) as q3       
from (select t.*,
             (select count(*)
              from t t2
              where t2.question = 'Company Name' and
                    t2.<ordering col> <= t.<ordering col>
             ) as grp
      from t
     ) t
group by grp;

SQL表表示无序的多集。如果表中没有指定行顺序的列,则无法执行所需操作,因为未定义数据的顺序。请显示不同的名称和答案。@jarlh,添加了示例问题和答案。希望能有帮助。嗨,这里有一个订购栏,只是为了清楚起见省略了。这里的问题是答案大部分是字符串,因此max操作符不会处理这些字符串。无论如何,我都会尝试使用这种“case-when”方法,谢谢。@Wiki。当然,马克斯在弦上工作。人们是从哪里得到这种想法的?你肯定不是第一个有这种误解的人。我有编程背景——SQL对我来说是非常陌生的。Javascript Math.max只对数字进行操作——因此这是错误的假设!您好@Gordon Linoff,我使用的是MySQL的旧版本,它不支持OVER-window功能。还有什么选择?@Wiki。您应该使用正在使用的数据库进行标记。我用另一个选项编辑了答案。