目前,我有两个表,使用Access 2007
TimeSheet(empID,TimeSheet,时数)和Rate(empID,Rate,PromotionDate)
如何根据员工的晋升日期选择正确的账单费率?例如,我有
Rates(001,10,#01/01/2013#)
Rates(001,15,#01/05/2013#)
Rates(002,10,#01/01/2013#)
和
Timesheet(001,#02/01/2013#,5)
Timesheet(001,#02/05/2013#,5)
Timesheet(002,#02/01/2013#,7)
在这种情况下,我想表明,如果empID 001在2013年02月01日提交一份时间表,它将以每小时10美元计费,但他从5月1日开始的时间表将以每小时15美元计费。
我现在的问题是
SELECT t.empID , t.timesheet, r.hours ,
(SELECT rate FROM rate WHERE t.timeSheet >= r.promotionDate) AS RateBilled
FROM rate AS r , timesheet AS t
WHERE r.empid = t.empid
当运行时,它将显示“此子查询最多可以返回一条记录”的消息。
任何帮助都将不胜感激,谢谢。
编辑:
我有一些奇怪的输出使用sql。
SELECT t.empID, t.timesheet, r.rate AS RateBilled
FROM Rates AS r, timesheet AS t
WHERE r.empid=t.empid And t.timeSheet>=r.promotionDate
GROUP BY t.empID, t.timesheet, r.rate, r.promotionDate
HAVING r.promotionDate=MAX(r.promotionDate);
正如您可以看到的,empID 1的输出表速率从10切换到15,尽管已经过了2001年5月,它应该都使用15,
任何帮助都是非常感谢的,谢谢。
发布于 2013-12-04 20:06:10
所设置的select子查询可能返回多个值,其中只应返回一个值。假设有两个晋升和一个最近的时间表,那么select将返回两个值,因为在这两种情况下,时间表都比升级更新。
尝试将以下内容用作子查询:
SELECT TOP 1 rate FROM rate
WHERE t.timeSheet >= r.promotionDate
ORDER BY r.promotionDate DESC
注:我认为上述方法效率不高。相反,尝试一些类似的
SELECT t.empID , t.timesheet, r.hours , r.rate AS RateBilled
FROM rate AS r , timesheet AS t
WHERE r.empid = t.empid AND t.timeSheet >= r.promotionDate
GROUP BY t.empID, t.timesheet
HAVING r.promotionDate = MAX( r.promotionDate);
https://stackoverflow.com/questions/20384750
复制相似问题