1、   
  UPDATE   Record     
  SET   OverTime   =   (CASE   WHEN     
                                        DATEDIFF(D,   
                                        CAST((CONVERT(CHAR(11),BeginDate,120   )     
                                              +   CONVERT(CHAR(8),BeginTime,108))   AS   DATETIME)   ,   
                                        CAST((CONVERT(CHAR(11),EndDate     ,120   )     
                                              +   CONVERT(CHAR(8),EndTime     ,108))   AS   DATETIME))     
                                        >   PrescribeTime   
                                  THEN   1   ELSE   0   END)2、   
    
  --SELECT   *   FROM   CALC   
  DECLARE   @S   VARCHAR(8000)   
  SET   @S   =   ''   
    
  SELECT   @S   =   @S   +   (SELECT   JSGS   FROM   CALC   WHERE   autoid   =   1)     
                                +   '+(CASE   WHEN   a.OverTime   =   1   THEN   '   
                                +   (SELECT   JSGS   FROM   CALC   WHERE   autoid   =   2)     
                                +   '   ELSE   0   END)'   
    
  SET   @S   ='SELECT     
                            a.autoid,   
                            a.CarID,   
                            a.DriverID,   
                            a.WorkerID,   
                            '+@S+'+ISNULL(SUM(B.money),0)   as   Money   
                    FROM     
                          (SELECT   *,   
                                  DATEDIFF(D,   
                                          CAST((CONVERT(CHAR(11),BeginDate,120   )     
                                                +   CONVERT(CHAR(8),BeginTime,108))   AS   DATETIME)   ,   
                                          CAST((CONVERT(CHAR(11),EndDate     ,120   )     
                                                +   CONVERT(CHAR(8),EndTime     ,108))   AS   DATETIME))   -   PrescribeTime   AS   RunTime     
                          FROM   Record)   a     
                    LEFT   JOIN     
                          MoneyDef   b     
                    ON     
                          a.autoid   =   b.runcarid     
                    GROUP   BY     
                          a.autoid,   
                          a.RunTime,   
                          a.RunLong,   
                          a.OverTime,   
                          a.CarID,   
                          a.DriverID,   
                          a.WorkerID'   
    
  EXEC(@S)   

解决方案 »

  1.   

    1、实际上最重要的是CONVERT(CHAR(11),BeginDate,120 ),MYSQL没有这种写法,贴记录
    及要求结果出来看看,即转换结果贴出来看看。
    2、同样有上述问题,MYSQL动态运行SQL语句方法与SQLSERVER不一样。
      

  2.   

    --派车单主表   
      CREATE   TABLE   Record   (   
      autoid   int   IDENTITY   (1,   1)   NOT   NULL   ,--自动编号   
      CarID   nvarchar   (12),--车辆ID   
      DriverID   nvarchar   (50),--驾驶员ID   
      WorkerID   nvarchar   (12),--人员ID   
      BeginDate   datetime   NULL   ,--开始日期   
      BeginTime   datetime   NULL   ,--开始时间   
      EndDate   datetime   NULL   ,--结束日期   
      EndTime   datetime   NULL   ,--结束时间   
      PrescribeTime   real   NULL   ,--额定时间(单位为小时)   
      PrescribeLong   real   NULL   ,--额定里程(单位为KM)   
      RunLong   real   NULL   ,--运行里程(单位为KM)   
      SFBC   bit   NOT   NULL   ,--是否包车   
      OverTime   bit   NOT   NULL   ,--是否超时   
      Money   real   NULL   ,--合计费用   
      UnitMoney   real   NULL   ,--单位承担费用   
      PersonMoney   real   NULL   --个人承担费用   
      )   ON   PRIMARY   
      GO   
        
      --计算公式定义   
      CREATE   TABLE   Calc   (   
      autoid   int   IDENTITY   (1,   1)   NOT   NULL   ,   
      GSID   nvarchar   (50),--公式编码   
      GSMC   nvarchar   (50),--公式名称   
      JSGS   nvarchar   (50)--计算公式   
      )   ON   PRIMARY   
      GO   
        
      --费用定义   
      CREATE   TABLE   MoneyDef   (   
      autoid   int   NOT   NULL   ,--自动编号   
      runcarid   int   NULL   ,--派车单编号   
      costname   nvarchar   (50),--费用名称   
      costcomment   nvarchar   (50),--费用说明   
      money   decimal(18,   0)   NULL   --费用金额   
      )   ON   PRIMARY   
      GO   
        
      --现要求实现如下功能:   
      --1、当EndDate与EndTime组合在一起的时间减去BeginDate与BeginTime组合在一起的时间大于PrescribeTime时,把OverTime改为1否则为0   
      --2、计算费用:   
      -- 1)在Record中的一条记录为一次派车记录,每一次派车时所发生的费用都不一致。那么,加了一个费用定义的表MoneyDef   
      -- 2)Record中的Money(合计费用)为MoneyDef表里面的runcarid等于Record表里面的autoid的所有记录的合计数   
    ---------------------------------------------------------------------------------------------------------------
    原来的一个帖子