我的表格包括以下数据:
EmployeeID Dept StartDate EndDate
JON001 PP 15-JUN-2013 13-AUG-2013
JON001 AA 14-AUG-2013 NULL
我有订单表
OrderID TransactionDate EmployeeID
2323 2-JUN-2012 JON001
2324 23-JUN-2013 JON001
2325 2-AUG-2014 JON001
我想加入这两张表来获得以下内容
OrderID TransactionDate EmployeeID DEPT
2323 2-JUN-2012 JON001 PP
2324 23-JUN-2013 JON001 PP
2325 2-AUG-2014 JON001 AA
注意orderid 2323交易日期小于最小开始日期 和JON001的当前部门没有endDate。 基本上,如果交易日期小于min startdate,那么min startdate应该是开放的。
如何做到?
这是我到目前为止所做的,但是因为交易日期不在startdate和enddate之间,所以我为OrderID 2323获取NULL。
SELECT OT.OrderID
,OT.TransactionDate
,OT.EmployeeID
, (
SELECT TOP 1 Dept FROM EmpDept ED WHERE ED.EmployeeID=OT.employeeID
AND OT.trans_date BETWEEN ED.StartDate AND
CASE
WHEN isnull(ED.EndDate,0)=0 THEN dateadd(year,50,ED.StartDate)
END
) "Dept"
FROM OrderTable OT
答案 0 :(得分:0)
我认为这会做你想做的事情:
SELECT OT.*
(SELECT TOP 1 Dept
FROM EmpDept ED
WHERE ED.EmployeeID = OT.employeeID
ORDER BY (CASE WHEN ED.StartDate <= OT.transDate THEN ED.StartDate END) DESC,
ED.StartDate ASC
) Dept
FROM OrderTable OT;
您也可以使用CROSS APPLY
来表达这一点,但相关的子查询很好。