带条件的计算字段

时间:2014-11-04 17:20:25

标签: sql tsql sql-server-2008-r2 conditional-statements calculated-columns

我需要你对这个问题的专业知识。我有一个车辆/驾驶员检查数据库,我试图创建一个交通违规点系统,这是一个系统,当司机犯下某些交通违规行为时,他们会招致违规驾驶点。

系统:将在一个人的最后12个月内发生的违规点加在一起计算点总数。如果累计积分达到14点,则暂停点数将被取消,或者在暂停服务后减去14点。

示例:

进攻日期 - 分数

  • 八月6,2013 - 6
  • 八月6,2013 - 6
  • 二月4,2014 - 4
  • 四月25,2014 - 4
  • 四月25,2014 - 2
  • 2014年5月8日 - 2

说明:

2014年4月25日发生了两起违规事件(2013年8月6日 - 2014年4月25日)累积了14分(6 + 4 + 4),暂停执行,然后取消了14分。 2014年4月25日的第2次进攻将结转并添加至2014年5月8日积分(共4分)。

以下是数据库表:

tbl_Driver

  • DriverID
  • 驾驶执照
  • 名字

tbl_Event

  • 事件ID
  • EVENTTIME
  • DriverID
  • CarID

tbl_EventViolation

  • EventViolatinID
  • 事件ID
  • ViolationID
  • 状态(1 =不,2 =是单选按钮)

tbl_Violation

  • ViolationID
  • ViolationName

tbl_ViolationClass

  • ViolationClassID
  • 类名

我制作了一个SQL代码,但只对累计分数求和,而不是整个条件。见下文:

SELECT  a.DriverId, 
        a.DriverLicense, 
        a.FirstName + ' ' + a.LastName as DriverName,
        a.FirstName, 
        a.LastName, 
        a.DriverMobileNo1,         
        a.Notes, 
        SUM(a.Points) as TotalPoints                    
FROM
        (
         SELECT dbo.Event.EventTime, 
                dbo.Drivers.DriverID, 
                dbo.Drivers.DriverLicense,
                dbo.Drivers.FirstName,
                dbo.Drivers.LastName,
            dbo.Drivers.DriverMobileNo1, 
            dbo.Violation.ViolationName, 
            dbo.Violation.Points,
            dbo.Drivers.Notes
          FROM    dbo.Drivers INNER JOIN dbo.Event ON dbo.Drivers.DriverId = dbo.Event.DriverId      INNER JOIN
    dbo.EventViolation ON dbo.Event.EventId = dbo.EventViolation.EventId INNER JOIN
    dbo.Violation ON dbo.EventViolation.ViolationId = dbo.Violation.ViolationId INNER JOIN
    dbo.ViolationClass ON dbo.Violation.ViolationClassId = dbo.ViolationClass.ViolationClassID

    WHERE   dbo.EventViolation.Status = 2 
    AND dbo.ViolationClass.ClassName Like 'C' 
    AND dbo.Violation.ViolationName Not Like 'LOAD NOT CORRECTLY RESTRAINED'
    AND dbo.Violation.ViolationName Not Like 'DRIVING WITHOUT UAE LICENSE' 

    ) as a
GROUP BY a.DriverId, a.DriverLicense, a.FirstName, a.LastName, a.DriverMobileNo1, a.Notes
ORDER BY Points desc

请任何人尝试修改代码以适应上面设置的条件

感谢您的时间。期待解决方案。

0 个答案:

没有答案