1

Update の set ステートメント内の select ステートメントから上位 1 つの結果を選択しようとしています。上位 1 を選択できますが、order by 句は機能しません。それを機能させる方法または回避策はありますか?

UPDATE  a1
SET     a1.ServiceLength = ( SELECT TOP 1
                                    a3.START_DATE
                                    ORDER BY  a3.START_DATE DESC
                         )
FROM    #t a1
    JOIN #TempService a2 ON a1.EmployeeNo = a2.EMPLOYEE_NO
    JOIN #TempService a3 ON a3.EMPLOYEE_NO = a2.Employee_No
WHERE   a2.START_DATE = a3.END_DATE + 1
    AND @specifiedDate > a2.START_DATE
4

3 に答える 3

2

CTE を使用してこれを実行してみてください。

WITH TopDate  
AS
(
   SELECT TOP 1 a3.START_DATE, a3.employee_no 
   FROM   #t a1 
   JOIN #tempservice a2 ON a1.employeeno = a2.employee_no 
   JOIN #tempservice a3 ON a3.employee_no = a2.employee_no 
   WHERE  a2.start_date = a3.end_date + 1 
       AND @specifiedDate > a2.start_date
   ORDER BY  a3.START_DATE DESC
)
UPDATE  a1
SET a1.ServiceLength = t.START_DATE
FROM #t a1
INNER JOIN TopDate AS t ON a1.employeeno = t.employee_no 
于 2013-10-09T08:39:30.360 に答える
1

MAX(START_DATE) を使用して、各従業員の最新の START_DATE を取得できます

update A set A.ServiceLength= (select MAX(B.Start_Date) from #tbl1 B where  B.EmployeeNo=A.EmployeeNo)
from #tbl1 A 

クエリに必要な where 句を追加してください。

于 2013-10-09T09:02:30.123 に答える