【发布时间】:2016-07-05 15:52:09
【问题描述】:
第一次在这里发布问题,但我是这个网站的常客,非常感谢这个社区,它对晦涩的问题有很好的答案。
下面是一个连接,它正在转换两个视图上的日期,导致大约 2000 万个日期在“PDR”视图中重新格式化。我只能在 Join 中使用年份和月份,这就是它被转换的原因(我在这部分没有选择)。
如果 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)
【问题讨论】:
-
哪个 RDBMS?您可以通过同时加入 YEAR(date) = YEAR(date) 和 MONTH() = MONTH() 来保持日期转换为数学,而不是转换为 varchar。这可能有助于表现一些。否则,您可以根据需要编写一个 case 语句,并在 case 语句 = 1 时说出然后加入。例如。 (当 department_cod = 'X' and MONTH(a) = MONTH(b) and YEAR(a) = YEAR(b) THEN 1 ELSE 0 END)= 1
标签: sql performance join implicit-conversion