我們有一個時間管理系統,我們的員工或承包商(資源)輸入他們的工作時間,我們從中獲得成本。我有一個錶的歷史成本:總結歷史成本費率超過預定時間(單一生效日期)
CREATE TABLE ResourceTimeTypeCost (
ResourceCode VARCHAR(32),
TimeTypeCode VARCHAR(32),
EffectiveDate DATETIME,
CostRate DECIMAL(12,2)
)
所以我有一個日期字段標記生效日期。如果我們有一個紀錄是
('ResourceA', 'Normal', '2012-04-30', 40.00)
,我添加一條記錄是
('ResourceA', 'Normal', '2012-05-04', 50.00)
因此,4月30日和5月3日之間輸入的所有時間將在40.00£,畢竟時間4日午夜將在50英鎊。我原則上理解這一點,但您如何撰寫表達此邏輯的查詢?
假設我的時間表看起來像下面
CREATE TABLE TimeEntered (
ResourceCode VARCHAR(32),
TimeTypeCode VARCHAR(32),
ProjectCode VARCHAR(32),
ActivityCode VARCHAR(32),
TimeEnteredDate DATETIME,
HoursWorked DECIMAL(12,2)
)
如果我插入以下記錄到TimeEntered表
('ResourceA','Normal','Project1','Management1','2012-04-30',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-01',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-02',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-03',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-04',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-07',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-08',7.5)
我想獲得通過返回的總費用查詢資源
因此,在上述情況下,它將是'ResourceA',(4 * 7.5 * 40)+(3 * 7.5 * 50)= 2325.00
任何人都可以提供一個示例SQL查詢嗎?我知道這個例子沒有使用TimeType(即它總是'正常'),但我想看看這是如何處理的
我不能改變數據庫的結構。非常感謝提前
你需要構造一個視圖,CTE或子查詢來查找最近匹配的「resoucretimecost」記錄,而不是{join,multiply,sum}。 – wildplasser
你使用什麼數據庫和版本? –
SQL server 2008 – Jon