2017-09-08 32 views
-4

我在存儲過程中一個小的查詢:使用,如果在SQL Server

case when t.status = 4 and (select top 1 nd.status from tableND 
where nd.Code= t.Code order by nd.ID desc)=4 
then 6 else t.status end) as status from tableTC t 

的問題是速度性能太慢。所以,我想將其更改爲另一個查詢。

現在該怎麼辦?

+0

顯示了一些數據,它會給一個更好地瞭解查詢在做什麼,可能是執行計劃。你有tCode的索引嗎? – dbajtr

+0

和你的表的結構 – Zeina

+0

和版本的SQLSERVER – etsa

回答

0

我無法做任何測試(您沒有發佈表結構和示例數據)。

爲了避免SELECT中箱(重複每次)你可以嘗試這樣的事:

CASE WHEN T.status=4 AND ND.STATUS=4 THEN 6 ELSE T.STATUS END AS STATUS 
FROM tableTC T 
LEFT JOIN (SELECT CODE, STATUS, ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY ID DESC) AS RN FROM TABLED) ND ON T.CODE=ND.CODE AND ND.RN=1