【问题标题】:How can I aggregate data from multiple rows into a single one spread across multiple columns?如何将多行中的数据聚合到跨多列的单个数据中?
【发布时间】:2014-08-20 04:05:27
【问题描述】:

我的数据库中有这张表,我想将多行中的数据聚合成一个分布在多列中的表:

ID PID 日期时间 1 12 10/04/2014 7:00 2 12 10/04/2014 10:00 3 12 10/04/2014 15:00 4 13 10/04/2014 7:00 5 13 10/04/2014 15:00 6 12 2014 年 11 月 4 日 7:20 7 12 2014 年 11 月 4 日 15:10 8 13 2014 年 11 月 4 日 7:10 9 13 2014 年 11 月 4 日 7:50 10 13 11/04/2014 15:00 11 13 11/04/2014 15:50

PID是员工ID,具体来说是一个考勤系统。 我需要提取此格式并将此表单插入另一个表中:

ID PID 日期 time1 time2 time3 time4 1 12 10/04/2014 7:00 10:00 15:00 2 13 10/04/2014 7:00 15:00 3 12 2014 年 11 月 4 日 7:20 15:10 4 13 2014 年 11 月 4 日 7:10 7:50 15:00 15:50

【问题讨论】:

  • 将此类数据存储在列中并不是一个好主意...第一个表看起来是更好的解决方案
  • 如果员工一天注册数百次会怎样?或者至少是一笔巨款?您正在以一种非常尴尬且不易调整的方式对表格进行非规范化。
  • 我每个月都会做一次,每个月底我可以删除它,我可以每天做一次,没问题。我只需要这个小问题的解决方案,我可以在更大的解决方案上做到这一点

标签: mysql sql-server common-table-expression denormalization row-number


【解决方案1】:

虽然 cmets 中所述的担忧是有效的,但我认为您有充分的理由满足您的特定要求。

此解决方案适用于 MSSQL:

SQL Fiddle, MSSQL 2008+

此解决方案适用于 MySQL:

SQL Fiddle, MySQL 5.5.32

【讨论】:

  • Jim V 给我留下了深刻的印象,我不知道你是如何得到这个解决方案的,我只是
    想知道你是怎么做到的,它是由程序自动解决还是你有弥补了。什么是
    mssql,什么是sql fiddle,以及我如何实现代码,我不习惯这种查询,通常我会像

    $sql= "选择/插入..."

    $result=mysql_query($sql,$connection)

    for($counter=0;$row=mysql_fetch_row($result) ;$counter){
    ...
    }

    在这种情况下我该怎么做,如果你能告诉我就好了
  • 先生 Jim V. 这是否意味着我需要安装 sql server 并在 sql server 上创建表并在其上创建查询,并使用 sql server 工作 php?
  • 我用mysql front 我相信很多东西都不能用它,我需要用sql server吗
  • @moussa 不,你不需要使用 MSSQL,但是这个查询(虽然很好)在 mysql 中不起作用。
  • 那我怎么能在什么平台上使用这个查询,我在使用mysql前端,它不工作吗?我该怎么办?
猜你喜欢
  • 2021-09-20
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
相关资源
最近更新 更多