这里是SQL新手。我正在尝试生成一个成本计算查询,该查询输出员工工时卡信息,并根据有效的员工成本计算率计算成本。
我的问题与这里的问题类似:追溯有效生效日期与重叠日期更改,但我不处理追溯activity或重叠日期范围。
表示例(rate表中的null值表示当前费率):
CREATE TABLE Emp_Rate
(
Emp int,
Rate money,
Rate_Start datetime,
Rate_Exp datetime
)
CREATE TABLE Emp_Time
(
Emp int,
Chrg_Date datetime,
Chrg_Code varchar(10),
Chrg_Hrs decimal(8, 2)
)
Insert into Emp_Rate (Emp,Rate,Rate_Start,Rate_Exp) Values ('1','20','5/1/09','4/30/10')
Insert into Emp_Rate (Emp,Rate,Rate_Start,Rate_Exp) Values ('1','21','5/1/10','4/30/11')
Insert into Emp_Rate (Emp,Rate,Rate_Start,Rate_Exp) Values ('1','22','5/1/11',NULL)
Insert into Emp_Time (Emp,Chrg_Date,Chrg_Code,Chrg_Hrs) Values ('1','5/10/09','B','8')
Insert into Emp_Time (Emp,Chrg_Date,Chrg_Code,Chrg_Hrs) Values ('1','5/10/10','B','8')
Insert into Emp_Time (Emp,Chrg_Date,Chrg_Code,Chrg_Hrs) Values ('1','5/10/11','B','8')
查询(返回由多个速率条目(显然)引起的dupes):
Select Emp_Time.Emp,
Cast(Emp_Time.Chrg_Date as DATE) as 'Chrg_Date',
Emp_Time.Chrg_Code,
Emp_Time.Chrg_Hrs,
Emp_Rate.Rate,
Emp_Time.Chrg_Hrs * Emp_Rate.Rate as 'Cost'
From Emp_Time inner join
Emp_Rate on Emp_Rate.Emp = Emp_Time.Emp
Order By [Emp],[Chrg_Date]
所需输出:
Emp Chrg_Date Chrg_Code Chrg_Hrs Rate Cost
1 2009-05-10 B 8.00 20.00 160.00
1 2010-05-10 B 8.00 21.00 168.00
1 2011-05-10 B 8.00 22.00 176.00
我在子查询中使用betweent
运算符来隔离基于计费日期的正确费率,但没有任何运气。
我很感激任何帮助!
您没有指定以下答案适用于SQL-Server的DBMS类型。我确信有其他方法可以实现这一点,但这种方法将null
rate_exp
日期替换为当前日期。
Select et.Emp,
Cast(et.Chrg_Date as DATEtime) as 'Chrg_Date',
et.Chrg_Code,
et.Chrg_Hrs,
er.Rate,
et.Chrg_Hrs * er.Rate as 'Cost'
From Emp_Time et
inner join
(
SELECT Emp
, Rate
, Rate_Start
, CASE
WHEN Rate_Exp is Null
THEN Convert(varchar(10), getdate(), 101)
ELSE Rate_Exp
END as Rate_Exp
FROM Emp_Rate
)er
on er.Emp = et.Emp
WHERE (et.Chrg_Date BETWEEN er.Rate_Start AND er.Rate_Exp)
Order By et.Emp,et.Chrg_Date
或者在where
子句中使用case
语句:
Select et.Emp,
Cast(et.Chrg_Date as DATEtime) as 'Chrg_Date',
et.Chrg_Code,
et.Chrg_Hrs,
er.Rate,
et.Chrg_Hrs * er.Rate as 'Cost'
From Emp_Time et
inner join Emp_Rate er
on er.Emp = et.Emp
WHERE (et.Chrg_Date
BETWEEN er.Rate_Start
AND CASE WHEN er.Rate_Exp Is Null
THEN Convert(varchar(10), getdate(), 101)
ELSE er.Rate_Exp END)
本文向大家介绍Postgresql查询效率计算初探,包括了Postgresql查询效率计算初探的使用技巧和注意事项,需要的朋友参考一下 摘要 关系数据库很重要的一个方面是查询速度。查询速度的好坏,直接影响一个系统的好坏。 查询速度一般需要通过查询规划来窥视执行的过程。 查询路径会选择查询代价最低的路径执行。而这个代价是怎么算出来的呢。 主要关注的参数和表 参数:来自postgresql.conf文
问题内容: 我有一个数据集,,和。每个资源可以被多个项目利用。 我想统计每个季度使用资源的项目数量。 因此,如果项目在特定年份的Q1开始并在当年的Q3结束,而project2在Q2开始并在Q3结束,那么我想为Q2计数2个项目,因为在Q1期间,project1和project2都处于活动状态。 这是我的数据集: 这是我要寻找的结果: 问题答案: 使用理货单: 使用from的日期,生成所有季度及其开始
让我们假设我有一个这样的结构化数组: 我将这个结构称为“categories”,所以,我在这个数组中有六个类别。我的目标是根据一个类别随机挑选一个产品。 我想做一个基于速率的类别选择,据我所知,我必须计算这个类别在数组中代表多少百分比,例如: 这会给我类似的东西: 好的,现在我要做一个简单的算法,根据这些比率得到类别;我想我现在需要在范围之间选择一个随机数,并制作一些“切片”,例如: 如果随机数介
我正在尝试制作一个使用3个变量的代码(在Swift 4 xcode 9中),其中2个变量由用户通过TextFields给出。另一个变量的值将根据哪个变量留空来计算。例如,如果用户将textfield1留空,则当按下按钮时,textfield2和textfield3的输入将用于计算。如果用户将textfield2留空,则使用textfield1和textfield3的输入,以此类推...我还设置了委
然后我运行下面这行: 当ASP.NET运行这行时,我得到错误“ORA-01843:不是一个有效的月份”。 似乎命令将“dateResult”列理解为日期,但它是一个整数。 我已经试过这样的石膏了,也不起作用:
我想使用QueryDSL库构建select count查询,如下所示: 中选择计数(1) 我创建了下一个代码: 由于结果selectStatement是Next: 能否请一些人建议如何重写上面的代码