大佬們:一張表A left join 另外一張表B 時 , 在不同的條件上,需要join多次同一張表, 而在select出的結果時又要去取這個多次join的B表第一個非空列, 這個時候查出來的結果就比較慢, 能有辦法優化嗎?
比如以下SQL ,CC_SAPAccountingDocumentDetail 需要多次left join V_CC_GetLatestCostCenter在不同的條件上,
最后 select 結果 要在V_CC_GetLatestCostCenter上取出第一個非空的CostCenterDescription欄位,有沒有其他效率高的寫法,
謝謝。
目前SQL 如下:
SELECT a.SupplierCode, a.Year,
COALESCE (CASE a.SpecialCostCenterCode WHEN '' THEN NULL
ELSE a.SpecialCostCenterCode END, CASE a.CostCenterCode WHEN '' THEN NULL ELSE a.CostCenterCode END,
CASE a.ActualCostCenter WHEN '' THEN NULL ELSE a.ActualCostCenter END, N'') AS ActualCostCenter,
COALESCE (scost.CostCenterDescription, d.CostCenterDescription, c.CostCenterDescription, N'') AS CostCenterDescription,
COALESCE (scost.CostCenterType, d.CostCenterType, c.CostCenterType, N'') AS CostCenterType,
COALESCE (scost.CostCenterTypeDescription, d.CostCenterTypeDescription, c.CostCenterTypeDescription, N'') AS CostCenterTypeDescription,
COALESCE (a.SpecialProfitCenter, a.ProfitCenter) AS ProfitCenter
FROM dbo.CC_SAPAccountingDocumentDetail AS a
INNER JOIN dbo.CC_SAPAccountingDocumentMain AS b ON a.Guid = b.Guid AND b.Rst = 'True'
LEFT OUTER JOIN dbo.V_CC_GetLatestCostCenter AS c ON a.CostCenterCode = c.CostCenterCode
LEFT OUTER JOIN dbo.V_CC_GetLatestCostCenter AS d ON a.ActualCostCenter = d.CostCenterCode
LEFT OUTER JOIN dbo.V_CC_GetLatestCostCenter AS scost ON a.SpecialCostCenterCode = scost.CostCenterCode
LEFT OUTER JOIN dbo.CC_Subject AS i ON i.SubjectCode = a.GeneralLedgerSubjectCode AND i.GradeCode = '01'
LEFT OUTER JOIN dbo.CC_Subject AS j ON j.SubjectCode = a.SubjectCode AND j.GradeCode = '02'
uj5u.com熱心網友回復:
能把幾個關鍵的欄位稱述一下嗎?寫這個sql的思路是什么。比如,要去空,那么,我第一次就過濾掉null的資料作為基礎表,然后在這個基礎上查詢,是不是可以去掉多余的查詢?轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/83672.html
標籤:基礎類
