2016-07-05 32 views
0

第一次在此發佈問題,但我是本網站的常用用戶,非常感謝此社區提供了對不明問題的很好回答。僅在符合加入條件時轉換

以下是將兩個視圖中的日期進行轉換的結果,這會導致在「PDR」視圖中重新格式化約2,000萬個日期。我只能在Join中使用年份和月份,這就是爲什麼它正在轉換(我沒有選擇那部分)。

我只需要在這些列中包含數據IF Department_Code ='X',因此這個最終彙總的結果〜500行中的90%在這些列中不會有任何內容。

我需要做這個更有效率,我想說的轉換隻有在Department_Code =「X」

我只能對這個標準添加到加入的日期?

Left Join [dbo].[SLHSV_TM_Pharm_IP_OP_Factor_Rollup] as TMIPOP 
on Left (Convert (varchar, TMIPOP.[Pharm_IPOP_MONTH], 112),6) 
= Left (Convert (varchar, PDR.Payroll_Period_End_Date, 112),6) 
+0

其中RDBMS?代替轉換爲varchar,您可以通過在YEAR(日期)= YEAR(日期)和MONTH()= MONTH()兩方面加入數據來保持日期轉換爲數學。這可能有助於表現一些。否則,您可以編寫一個case語句,無論您想要什麼時候case case = 1,然後加入。例如。 (CASE當department_cod ='X'和MONTH(a)= MONTH(b)和YEAR(a)= YEAR(b)THEN 1 ELSE 0 END)= 1 – Matt

回答

0

我需要做這個更有效率,我想說轉換日期只有在Department_Code =「X」

我是否能夠添加標準的加入?

由於轉換後的日期在[左]加入的條件下使用,我想,避免轉換裝置以Department_Code不同於'X'行將(由於這個原因)未滿足連接條件。

如果Department_Code列上SLHSV_TM_Pharm_IP_OP_Factor_Rollup,然後做最簡單的事情是寫像這樣的連接條件:

Left Join [dbo].[SLHSV_TM_Pharm_IP_OP_Factor_Rollup] as TMIPOP 
    on TMIPOP.[Department_Code] = 'X' 
    and Left (Convert (varchar, TMIPOP.[Pharm_IPOP_MONTH], 112),6) 
    = Left (Convert (varchar, PDR.Payroll_Period_End_Date, 112),6) 

你的查詢規劃然後可能避免評估AND右側當左手評估爲假時。它可以這樣做,但它是否實際執行取決於實現。

如果你想成爲肯定的,那麼你可以預先篩選的內錶行你不想:

Left Join (
    select * 
    from [dbo].[SLHSV_TM_Pharm_IP_OP_Factor_Rollup] 
    where [Department_Code] = 'X' 
) as TMIPOP 
    on Left (Convert (varchar, TMIPOP.[Pharm_IPOP_MONTH], 112),6) 
    = Left (Convert (varchar, PDR.Payroll_Period_End_Date, 112),6) 

如果Department_Code列而不是在桌子PDR,那麼你的選擇是更有限的,但這應該工作(如果該列是其他表的模擬應該工作):

Left Join [dbo].[SLHSV_TM_Pharm_IP_OP_Factor_Rollup] as TMIPOP 
    on case 
    when PDR.[Department_Code] = 'X' 
     then Left (Convert (varchar, TMIPOP.[Pharm_IPOP_MONTH], 112),6) 
     = Left (Convert (varchar, PDR.Payroll_Period_End_Date, 112),6) 
    else 1 = 0 
    end 

可以想象的是,你會發現不僅僅是做所有的轉換,去年更貴。由於性能顯然是您關心的問題,所以測試至關重要。查看您評估的選項的查詢計劃也是可取的,因爲這可能會幫助您找到效果更好的變化。

+0

看到它後總是看起來很明顯。我正在嘗試這個,讓它運行一下。希望能做到。我會回覆結果。謝謝! 左連接( select * from [dbo]。[SLHSV_TM_Pharm_IP_OP_Factor_Rollup] 其中[Department_Code] ='X' )作爲TMIPOP –