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)
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)
解决方案 »
- 求DB工程师面试题一份
- mysql 事务 回滚 失败
- 请教,这个错误是不是数据库没连上呀?
- 初用Mysql,大家帮我看看这个存储过程有语法错误么?
- ASP+MYSQL使用like查询遇到的"驱动程序不支持所需的属性"问题,请教MYSQL通配符问题!
- 怎样通过命令知道mysql的版本号.
- MySQL-Front 3.0
- 如何让mysql数据库自己保证某个字段的值大于指定值
- MYSQL ADO 问题(很重要)??????????????
- mysql.select语句里怎样批量的在一个字段前面加指定字符?也就是update语句怎样写才能实现?
- MYSQL语句优化问题,不理解,求帮助!!
- jdbc连接mysql问题
及要求结果出来看看,即转换结果贴出来看看。
2、同样有上述问题,MYSQL动态运行SQL语句方法与SQLSERVER不一样。
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的所有记录的合计数
---------------------------------------------------------------------------------------------------------------
原来的一个帖子