0

これは、このステートメントを実行する別の方法、またはより効率的にする方法の問題です。

この声明は、サイトを最も早く離れるすべてのスタッフを指名することを意図していますが、彼らのスタッフも今日サイトにいる必要があります.

SELECT 
    e.EmpName,
    cs.SiteName
FROM
    Employee e
INNER JOIN
    EmployeeAssignment ea
ON
    e.EmpId = ea.EmpId
INNER JOIN
    CustomerSite cs
ON
    ea.CustId = cs.CustId
WHERE 
    e.EmpId IN
    (
    SELECT
        ea.EmpId
    FROM
        EmployeeAssignment ea
    WHERE
         ea.EndDate IN
            (
            SELECT 
                MIN(ea.EndDate)
            FROM 
                 EmployeeAssignment ea
             WHERE
                GETDATE() BETWEEN ea.StartDate AND ea.EndDate
             GROUP BY 
                CustId
             ));

誰かがこれを書くためのより良い方法を考えている場合は、返信してください:)

4

2 に答える 2

1

これを試して

SELECT  
    e.EmpName, 
    cs.SiteName 
FROM 
    Employee e 
INNER JOIN 

(
 SELECT  custid,empid from EmployeeAssignment ea1 where Enddate=( 
             select MIN(ea.EndDate) 
            FROM  
                 EmployeeAssignment ea 
             WHERE 
                GETDATE() BETWEEN ea.StartDate AND ea.EndDate 
                and ea.custid=ea1.custid
             )
) as ea
ON 
    e.EmpId = ea.EmpId 
INNER JOIN 
    CustomerSite cs 
ON 
    ea.CustId = cs.CustId 
于 2012-07-16T13:04:02.567 に答える
0

これは機能する場合と機能しない場合があります。

SELECT 
    e.EmpName,
    cs.SiteName
FROM
    Employee e
INNER JOIN
    EmployeeAssignment ea
ON
    e.EmpId = ea.EmpId
INNER JOIN
    CustomerSite cs
ON
    ea.CustId = cs.CustId
GROUP BY   
e.EmpName,
cs.SiteName
HAVING ea.EndDate = 
        (
        SELECT 
            MIN(ea.EndDate)
        FROM 
             EmployeeAssignment ea
         WHERE
            GETDATE() BETWEEN ea.StartDate AND ea.EndDate);
于 2012-07-16T13:07:12.730 に答える