2017-03-17 61 views
1

我有這樣的查詢:更新行調用一次每

UPDATE RM 
SET RM.WEEK_1 = (
    SELECT P.AVERAGE_AVAI FROM dbo.f_SCAVAI_GetWeekAverage(RM.OPRO_KEY, @WEEKS_MONTH, @cWorkDaysOnly, RM.KAPACITETA) P WHERE P.WEEKOFMONTH = 1 
), 
RM.WEEK_2 = (
    SELECT P.AVERAGE_AVAI FROM dbo.f_SCAVAI_GetWeekAverage(RM.OPRO_KEY, @WEEKS_MONTH, @cWorkDaysOnly, RM.KAPACITETA) P WHERE P.WEEKOFMONTH = 2 
), 
RM.WEEK_3 = (
    SELECT P.AVERAGE_AVAI FROM dbo.f_SCAVAI_GetWeekAverage(RM.OPRO_KEY, @WEEKS_MONTH, @cWorkDaysOnly, RM.KAPACITETA) P WHERE P.WEEKOFMONTH = 3 
), 
RM.WEEK_4 = (
    SELECT P.AVERAGE_AVAI FROM dbo.f_SCAVAI_GetWeekAverage(RM.OPRO_KEY, @WEEKS_MONTH, @cWorkDaysOnly, RM.KAPACITETA) P WHERE P.WEEKOFMONTH = 4 
), 
RM.WEEK_5 = (
    SELECT P.AVERAGE_AVAI FROM dbo.f_SCAVAI_GetWeekAverage(RM.OPRO_KEY, @WEEKS_MONTH, @cWorkDaysOnly, RM.KAPACITETA) P WHERE P.WEEKOFMONTH = 5 
), 
RM.WEEK_6 = (
    SELECT P.AVERAGE_AVAI FROM dbo.f_SCAVAI_GetWeekAverage(RM.OPRO_KEY, @WEEKS_MONTH, @cWorkDaysOnly, RM.KAPACITETA) P WHERE P.WEEKOFMONTH = 6 
) 
FROM @ROOMS_BY_DEPA_KEY1 RM 

這工作,但它是緩慢的,因爲dbo.f_SCAVAI_GetWeekAverage被每星期數。該函數返回給定OPRO_KEY的相同結果。基本上,如果這個函數每行只調用一次(一次爲OPRO_KEY)就足夠了,然後每週的結果將從該表中更新。是否有可能做這樣的事情?因此,不是每週調用這個函數,而是每行只調用一次,並且根據WEEKOFMONTH更新幾周?

回答

1

請嘗試下面的查詢和查詢性能,

UPDATE RM 
SET  RM.WEEK_1 = (CASE WHEN WA.WEEKOFMONTH = 1 THEN WA.AVERAGE_AVAI ELSE RM.WEEK_1 END) 
     ,RM.WEEK_2 = (CASE WHEN WA.WEEKOFMONTH = 2 THEN WA.AVERAGE_AVAI ELSE RM.WEEK_2 END) 
     ,RM.WEEK_3 = (CASE WHEN WA.WEEKOFMONTH = 3 THEN WA.AVERAGE_AVAI ELSE RM.WEEK_3 END) 
     ,RM.WEEK_4 = (CASE WHEN WA.WEEKOFMONTH = 4 THEN WA.AVERAGE_AVAI ELSE RM.WEEK_4 END) 
     ,RM.WEEK_5 = (CASE WHEN WA.WEEKOFMONTH = 5 THEN WA.AVERAGE_AVAI ELSE RM.WEEK_5 END) 
     ,RM.WEEK_6 = (CASE WHEN WA.WEEKOFMONTH = 6 THEN WA.AVERAGE_AVAI ELSE RM.WEEK_6 END) 
FROM @ROOMS_BY_DEPA_KEY1 RM 
    OUTER APPLY(
     SELECT P.AVERAGE_AVAI,P.WEEKOFMONTH 
     FROM dbo.f_SCAVAI_GetWeekAverage(RM.OPRO_KEY, @WEEKS_MONTH, @cWorkDaysOnly, RM.KAPACITETA) P 
    ) AS WA 
+0

謝謝回答。我沒有看到任何週數的結果?就像沒有更新。 – FrenkyB