如何加入不同的CONCAT表达式?

时间:2019-02-06 19:44:10

标签: sql sql-server

我试图基于包含不同文本条件的CONCAT表达式联接表。

我尝试了一种效率低下的方法,只是查询时间太长。

SELECT 
sf.displayId, 
-- tw.displayText,
CASE
        WHEN tw.DisplayText IN ('N/A', 'NotApplicable', 'Not Applicable')
        THEN 'Not Applicable'
        ELSE REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(tw.DisplayText,'client','Client'),'approved','Approved'),'rejected','Rejected'),'review','Review'),'Requirement','Requirement'),'open','Open'),'submitted','Submitted'),'complete','Complete'),'incomplete','Incomplete'),'pending','Pending'),'resubmit','Resubmit'),'Awaiting review','Awaiting Review')
        END AS AuditStatus
FROM Connect.Data.supplier_form sf
JOIN Connect.Data.translation tw 
     ON ((CONCAT('workflowStepName' , sf.workflowStatusId) = tw.translationField) OR (CONCAT('workflowStepMessage' , sf.workflowStatusId) = tw.translationField))
     AND tw.language = 'en'
WHERE sf.deleted = 0
AND tw.displayText IN ('Awaiting Review','Awaiting review')
ORDER BY sf.displayId
OFFSET 0 ROWS
FETCH NEXT 100 ROWS ONLY;

我想以一种更有效的方式基于Connect.Data.supplier_form sf表达式加入CONCAT

1 个答案:

答案 0 :(得分:0)

我不确定SQL优化器在SQL Server中的性能如何,因此您可以尝试翻转连接条件的顺序以使其更易于使用索引。我会做两件事:

  • 我将JOIN条件更改为:

    JOIN Connect.Data.translation tw 
    ON tw.language = 'en'
    AND tw.translationField in (
      CONCAT('workflowStepName' , sf.workflowStatusId),
      CONCAT('workflowStepMessage' , sf.workflowStatusId)
    )
    
  • 我将添加索引:

    create index ix1 on Connect.Data.translation(language, translationField);
    

尝试一下,让我们知道它是否可以改善性能。