2013-08-23 69 views
-1

我正在嘗試連接4個帶有內部聯接的表,其中一個帶有別名'm'將爲已定義的條件(這是一種有效的可能性)返回空的結果集。我想爲我的IF語句設置的空結果的規定:如何檢查內部聯接的結果是否爲空

IF(((((SUM(m.TTL_ONLINE_COUNT)+SUM(m.TTL_OFFLINE_COUNT))*100))> TAV.`ThresholdValue`) OR ISNULL(m.TTL_ONLINE_COUNT) 

目前,我試圖檢查的一列返回的數據集爲空,但根據需要它不是工作。我怎樣才能做出這樣的規定?

SELECT AQ.Adate, TE.EmployeeID, TE.`WorkerLevelID`,TAV.ManufacturingProductID,TAV.SubOfficeID,Te.SubstationCode,TAV.`AllowID`,TAV.`WorkerLevelID`,TAV.ThresholdValue,TAV.RewardValue, 
CASE AQ.Status 
    WHEN '0' OR '6' THEN 
     IF(((((SUM(m.TTL_ONLINE_COUNT)+SUM(m.TTL_OFFLINE_COUNT))*100))> TAV.`ThresholdValue`) OR ISNULL(m.TTL_ONLINE_COUNT), 
      CASE TAV.RateType 
       WHEN 'Monthly' THEN 
        TAV.RewardValue/DAY(LAST_DAY(P_DateFrom)) 


       WHEN 'Yearly' THEN 
        TAV.RewardValue/365.25 


      END, 0) 
END AS FPYAllowance 
FROM TempEmployee TE 
INNER JOIN TempAllowValid TAV ON TE.ManufacturingProductID = TAV.ManufacturingProductID  AND TE.SubOfficeID =TAV.SubOfficeID AND TE.WorkerLevelID = TAV.WorkerLevelID 
INNER JOIN Attendance_QlikView AQ ON P_DateFrom = AQ.ADate 
INNER JOIN `mwooriginbasedfault` m ON m.Defect_Origin_Code = TE.SubstationCode AND m.Defect_Date = AQ.ADate 
WHERE (TAV.AllowID = 3 OR Tav.AllowID=10) 
GROUP BY AQ.Adate, TE.EmployeeID); 
+0

如果m返回空結果集,則整個查詢將返回一個空結果集。如果您仍想獲得結果,請使用左連接。 –

+0

你說它不能按預期工作,但你不告訴你的期望。 –

+0

我想,如果內部連接與m返回一個空的結果集我的if語句處理它,並選擇一個'0',而不是完全忽略它。如果我沒有在我的問題中說清楚,我很抱歉。 – Salik

回答

0

你所需要的就是表mleft join,而不是一個inner join鏈接。

inner join消除了表m中沒有對應行的所有TE.EmployeeID。 A left join將保留所有TE.EmployeeID並填充表m的字段爲空。

通過

LEFT JOIN `mwooriginbasedfault` m ON 
    m.Defect_Origin_Code = TE.SubstationCode AND m.Defect_Date = AQ.ADate 

你不應該需要計提您if條款中一個空的結果替換

INNER JOIN `mwooriginbasedfault` m ON 
    m.Defect_Origin_Code = TE.SubstationCode AND m.Defect_Date = AQ.ADate 

。組函數sum()爲自身計算null值,並在計算總和時忽略它們。

相關問題