2013-11-04 17 views
0

我正在为较大的生产系统开发一个简单的时间表模块,并且需要向用户显示一张信息表。我有以下表格可供使用:返回按列顺序输入的数据

TimeRecords 
    ID 
    WorkerID 
    AssyLineID 
    Station 
    Sequence 
    NbrHours 
    DateSubmitted 

Workers 
    ID 
    Name 

AssyLines 
    Name 

数据输入期间,AssyLine会为每个工人输入时间。一个给定的工作人员可能会在一天中的两个或更多不同的工作站上工作。序列值是根据数据输入过程中输入的名称顺序分配的。

现在我想回到这个数据对所有组装生产线和所有工作人员按以下格式:

ResultSet 
    Worker.ID 
    Worker.Name 
    AssyLine.Name - group returned rows by assembly line, in alphabetical order 
    Sequence  - within each assembly line, group by sequence 
    NbrHours  - total hours for worker for this assembly line, all stations 
    TotalHours  - total hours for this worker across all assembly lines and stations 

其他注意事项: 1)行对于给定的工作人员要相对集中,开始与装配线记录的时间最长,按装配线的顺序排列。我计划将给定工作人员的所有条目合并到一行中以便向用户显示,如果将一个用户的所有行分组在一起,这将更加容易。如果不能这样做,我将不得不组和代码行的数据进行排序...

下面是该查询我想出迄今:

SELECT 
     w.ID 
     ,w.Name 
     ,a.Name 
     ,tr.NbrHours 
     ,tr.Seq 
    FROM 
     TimeRecords tr 
      INNER JOIN 
     Workers w ON 
      w.ID = tr.WorkerId 
      INNER JOIN 
     AssyLines a ON 
      a.AssyLineID = tr.AssyLineId 
    WHERE 
     tr.DateSubmitted < '2000-01-01' 
    ORDER BY 
     w.Name 
     ,a.Name 
     ,tr.Seq 
     ,NbrHours DESC 

显然,这留下了很多被期望。工作人员条目没有分组在一起,并且工作人员没有总数。

任何人都可以帮助我解决这个问题吗?我想我需要一个存储过程要做到这一点,而不是一个视图...

谢谢, 戴夫

回答

1

这其中大部分可以用BY子句的简单组来完成;凌乱的部分配备了您的显示所有小时的要求,但我相信这样的事情应该根据什么样的工作DB你使用:

SELECT 
    w.ID 
    ,w.Name 
    ,a.Name 
    ,tr.Seq 
    ,SUM(tr.NbrHours) as nbrHours 
    (SELECT SUM(tr.NbrHours) 
     FROM TimeRecords tr2 
     WHERE tr2.WorkerId = w.id and tr2..DateSubmitted < '2000-01-01') as TotalHours 
FROM 
    TimeRecords tr 
     INNER JOIN 
    Workers w ON 
     w.ID = tr.WorkerId 
     INNER JOIN 
    AssyLines a ON 
     a.AssyLineID = tr.AssyLineId 
WHERE 
    tr.DateSubmitted < '2000-01-01' 
GROUP BY 
    w.ID 
    ,w.Name 
    ,a.Name 
    ,tr.Seq 
ORDER BY 
    ReportName 
    ,ShortName 
    ,tr.Seq 
+0

这并不完全得到我在哪里,我需要 - 唯一它让我获得的是所有生产线上的总小时数,我对此表示感谢。但是,它不符合我添加的警告,然后重写,使其更有意义 - 此数据的目的是首先汇编行顺序的报告,每个工人只有一行包含所有工作小时。我还需要该行与他们记录时间最长的装配线一起出现。 – DaveN59

+0

最后,我带着一些非常类似于此的东西,没有ORDER BY子句 - 就我所知,它对于视图没有任何作用。然后,我在Linq查询中进行了排序,创建一个集合并循环访问集合,将员工时间组合成一个包含小时和组装流水线列表的记录列表。我不能把这作为答案,因为似乎没有回答我问的问题......对不起。 – DaveN59