使用startdate和enddate获取部门的SQL查询

时间:2014-09-22 23:22:33

标签: sql sql-server tsql

我的表格包括以下数据:

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

1 个答案:

答案 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来表达这一点,但相关的子查询很好。