如何在Update语句中使用Order by
How to use Order by in Update statement
AccountHmy|UserHmy|Closing|Reason| |TimeStamp
606 |299 |0 |Re-opened for Testing |2015-08-11 10:22:36
606 |108 |1 |Testing Completed |2015-08-10 10:22:36
606 |108 |1 |Re-opened for Testing |2015-08-10 10:15:36
我有一个 SQL 查询结果是 4 行,
select * from Synergy.dbo.cu_Close_Account_Log SCAL
where SCAL.AccountHmy='602634' order by SCAL.Timestamp desc
现在我需要通过加入之前的 table 来更新另一个 table,我应该只考虑早期结果集中返回的第一个值。
UPDATE
ST
SET
StatusHmy = (
CASE
WHEN ST.StatusHmy = 4 AND SCAL.Closing = 0 THEN 5
WHEN ST.StatusHmy = 4 AND SCAL.Closing = 1 THEN 2
END
)
FROM
Synergy.dbo.cu_Transition ST
LEFT JOIN Synergy.dbo.cu_Close_Account_Log SCAL ON SCAL.AccountHmy = ST.AccountHmy
WHERE
ST.StatusHmy = 4 AND SCAL.Closing IN ( 0,1 )
ORDER BY
SCAL.Timestamp desc
但是这里的 Order By 抛出了一个错误。如何解决?
如果你只想对一个值使用子查询,那么使用TOP
和ORDER BY
。这可以在子查询中进行:
UPDATE ST
SET StatusHmy = (CASE WHEN ST.StatusHmy = 4 AND SCAL.Closing = 0 THEN 5
WHEN ST.StatusHmy = 4 AND SCAL.Closing = 1 THEN 2
END )
FROM Synergy.dbo.cu_Transition ST JOIN
(select top 1 scal.*
from Synergy.dbo.cu_Close_Account_Log SCAL
where SCAL.AccountHmy = '602634'
order by SCAL.Timestamp desc
) scal
ON SCAL.AccountHmy = ST.AccountHmy
WHERE ST.StatusHmy = 4 AND SCAL.Closing IN ( 0,1 );
AccountHmy|UserHmy|Closing|Reason| |TimeStamp
606 |299 |0 |Re-opened for Testing |2015-08-11 10:22:36
606 |108 |1 |Testing Completed |2015-08-10 10:22:36
606 |108 |1 |Re-opened for Testing |2015-08-10 10:15:36
我有一个 SQL 查询结果是 4 行,
select * from Synergy.dbo.cu_Close_Account_Log SCAL
where SCAL.AccountHmy='602634' order by SCAL.Timestamp desc
现在我需要通过加入之前的 table 来更新另一个 table,我应该只考虑早期结果集中返回的第一个值。
UPDATE
ST
SET
StatusHmy = (
CASE
WHEN ST.StatusHmy = 4 AND SCAL.Closing = 0 THEN 5
WHEN ST.StatusHmy = 4 AND SCAL.Closing = 1 THEN 2
END
)
FROM
Synergy.dbo.cu_Transition ST
LEFT JOIN Synergy.dbo.cu_Close_Account_Log SCAL ON SCAL.AccountHmy = ST.AccountHmy
WHERE
ST.StatusHmy = 4 AND SCAL.Closing IN ( 0,1 )
ORDER BY
SCAL.Timestamp desc
但是这里的 Order By 抛出了一个错误。如何解决?
如果你只想对一个值使用子查询,那么使用TOP
和ORDER BY
。这可以在子查询中进行:
UPDATE ST
SET StatusHmy = (CASE WHEN ST.StatusHmy = 4 AND SCAL.Closing = 0 THEN 5
WHEN ST.StatusHmy = 4 AND SCAL.Closing = 1 THEN 2
END )
FROM Synergy.dbo.cu_Transition ST JOIN
(select top 1 scal.*
from Synergy.dbo.cu_Close_Account_Log SCAL
where SCAL.AccountHmy = '602634'
order by SCAL.Timestamp desc
) scal
ON SCAL.AccountHmy = ST.AccountHmy
WHERE ST.StatusHmy = 4 AND SCAL.Closing IN ( 0,1 );