【问题标题】:Microsoft Access Row MergeMicrosoft Access 行合并
【发布时间】:2014-05-26 18:11:30
【问题描述】:

我希望在通过查询合并 Microsoft Access 上的数据方面获得一些帮助。目前我收到一个包含许多记录的数据转储。这些记录中的大多数是针对同一个工作的,即)相同的工作 ID。我想将它们组合成一行。这可能吗?

输入:

jobid   jobdescription  processid   processdescription  processcreateddate
1234    Compliance  124               Accept              03/04/2014 10:32
1234    Compliance  135                Hold           03/07/2014 14:04
1234    Compliance  164                Review             03/04/2014 10:33
1234    Compliance  178               Complete             03/11/2014 8:21

输出:

jobid   jobdescription processdescription processcreateddate processdesc2  Proccreatedate2
1234    Compliance      Accept             03/04/2014 10:32    Hold       03/07/2014 14:04

等等……

谢谢,

瑞克

【问题讨论】:

  • 您当然可以进行某种合并。但是您没有提供所需的逻辑。 Review 行和 Complete 行会发生什么情况?
  • 到目前为止你尝试过什么?请展示您在卡住之前取得的进展。
  • 我尝试将后续行合并在一起的原因是为了更好地组织数据,以便我可以通过条件字段从数据中提取特定信息。目前,有多行相同的jobID具有不同的进程ID,表示作业所采用的流程。我试图通过 JobID 将表加入到自身中。但是,当我尝试提取职位描述和流程描述的特定信息时,会返回多个字段。

标签: sql merge ms-access-2010


【解决方案1】:

本质上,您需要一个将行转换为列,或将形状从长变宽的查询。

考虑以下查询,其中子查询和派生表嵌套在聚合查询中。内部查询计算每个jobid 的进程数,然后外部查询有条件地按jobidjobdescription 使用计算的计数进行聚合:

SELECT jobid, jobdescription,    
       Max(IIF(processcount=1, pdesc, NULL)) As processdesc1,
       Max(IIF(processcount=1, pdate, NULL)) As prcoesscreateddate1,
       Max(IIF(processcount=2, pdesc, NULL)) As processdesc2,
       Max(IIF(processcount=2, pdate, NULL)) As processcreateddate2,
       Max(IIF(processcount=3, pdesc, NULL)) As processdesc3,
       Max(IIF(processcount=3, pdate, NULL)) As processcreateddate3,
       Max(IIF(processcount=4, pdesc, NULL)) As processdesc4,
       Max(IIF(processcount=4, pdate, NULL)) As processcreateddate4

FROM
       (SELECT t1.jobid, t1.jobdescription, t1.processid As pid,
               t1.processdescription As pdesc, t1.processcreatedate As pdate,
               (SELECT Count(*) FROM Processes t2 
                WHERE t1.jobid=t2.jobid AND t1.processcreatedate >= t2.processcreatedate) 
                As processcount
        FROM processes_dump t1) As derivedTable

GROUP BY t1.jobid, jobdescription;

输出

jobid   jobdescription  processdesc1    prcoesscreateddate1   processdesc2  processcreateddate2  processdesc3   processcreateddate3 processdesc4    processcreateddate4
1234       Compliance        Access     3/4/2014 10:32:00 AM       Review   3/4/2014 10:33:00 AM        Hold    3/7/2014 2:04:00 PM     Complete    3/11/2014 8:21:00 AM

【讨论】:

    【解决方案2】:

    据我所知,每个流程描述实际上应该是数据库中的字段名称。

    每个过程描述都应该包含一个日期。

    职位ID--职位描述--AcceptDate--HoldDate--ReviewDate--CompDate

    1234----合规-----01/10/14--01/11/14---01/12/14--01/01/15

    【讨论】:

      猜你喜欢
      • 2019-12-24
      • 2017-05-26
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 2013-06-25
      • 1970-01-01
      相关资源
      最近更新 更多