代码之家  ›  专栏  ›  技术社区  ›  Greg

SQL-如何查找本年迄今的金额?

  •  3
  • Greg  · 技术社区  · 15 年前

    假设我有一张这样的桌子叫做小时:

    employee, payperiod, hours
    greg, 1/31/2010, 12
    greg, 1/31/2010, 15
    mark, 1/31/2010, 10
    mark, 1/31/2010, 11
    greg, 2/28/2010, 12
    greg, 2/28/2010, 15
    greg, 2/28/2010, 4
    

    如何查找给定员工和工资期的本年迄今的工作时间?

    employee, payperiod, hours_YTD
    greg, 1/31/2010, 27
    mark, 1/31/2010, 21
    greg, 2/28/2010, 58
    mark, 2/28/2010, 21  (this row is a nice to have, I can live without it if it's too tricky)
    

    到目前为止,我已经试过了,但总的来说似乎是关闭:

    select employee,payperiod,sum(hours) from hours h1
     join hours h2 on h2.payperiod<=h1.payperiod and h2.payperiod>=1/1/2010
      and h1.employee=h2.employee
     group by h1.employee, h1.payperiod
    

    2 回复  |  直到 15 年前
        1
  •  4
  •   p.campbell    15 年前

    这将使用SELECT中的子查询获取运行总数。

    在28号找到马克。

    select employee, 
            payperiod,
            (SELECT sum ([hours]) FROM @hours f2 
                 WHERE f2.payperiod <= f.payperiod and f2.employee=f.employee) as hh
    
     from @hours as f
     where  YEAR(payperiod) = year(getdate()) --current year.
     group by employee, payperiod
     order by payperiod
    
        2
  •  1
  •   JeffO    15 年前

    Select 
        H.employee
      , H.payperiod
      , (Select Sum(H1.hours) 
         From hours as H1         
         Where H1.employee = H.employee 
            and H1.payperiod <= H.payperiod
        ) as hours_YTD
    from hours as H
    where Year(H.payperiod) = Year(GetDate()
      and H.payperiod <= GetDate()
    group by employee
       , payperiod