我正在尝试使用内部联接加入4个表,其中一个使用别名“m”,为定义的条件返回空结果集(这是一种有效的可能性)。我想在我的IF语句中为空结果集做一个规定:
IF(((((SUM(m.TTL_ONLINE_COUNT)+SUM(m.TTL_OFFLINE_COUNT))*100))> TAV.`ThresholdValue`) OR ISNULL(m.TTL_ONLINE_COUNT)
目前,我正在尝试检查返回的数据集的列是否为null,但它不能按预期工作。我怎样才能做出这样的规定?
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 :(得分:0)
此处您需要将表格m
与left join
而不是inner join
相关联。
inner join
消除了表TE.EmployeeID
中没有相应行的所有m
。 left join
将保留所有TE.EmployeeID
并填充表m
的字段为空。
替换
INNER JOIN `mwooriginbasedfault` m ON
m.Defect_Origin_Code = TE.SubstationCode AND m.Defect_Date = AQ.ADate
通过
LEFT JOIN `mwooriginbasedfault` m ON
m.Defect_Origin_Code = TE.SubstationCode AND m.Defect_Date = AQ.ADate
您不需要在if
子句中设置空结果集。小组函数sum()
会为null
值计算自己,并在计算总和时忽略它们。