ИСПОЛЬЗОВАНИЕ СЛУЧАЯ КОГДА-ЛИБО ГДЕ или ПРИСОЕДИНЯЙТЕСЬ
SELECT Pod_Code, COUNT(*)
FROM [DBHFT 201314 Trust SLAM Model PID].dbo.D_Actual_Activity_HRG A
INNER JOIN dbo.D_HrgCodes B ON A.HRG_ID = B.Hrg_ID
INNER JOIN dbo.D_PodAll C ON A.Pod_ID = C.Pod_ID
INNER JOIN dbo.D_SpecCodes D On A.Spec_ID = D.Spec_ID
INNER JOIN dbo.D_GppCodes E ON A.Gpp_ID = E.Gpp_ID
LEFT JOIN dbo.D_CalcResults_ReportMasterIDs F ON A.ReportMasterID = F.ReportMaster_ID
LEFT JOIN dbo.D_CalcResultsMain G ON F.RM_ID = G.RM_ID
AND A.MonthNo = G.Month
AND A.Spec_ID = G.Spec_ID
AND A.Pod_ID = G.POD_ID
AND A.Hrg_ID = G.HRG_ID
WHERE G.Category_Type = 0
AND (Activity_Actual <>0 OR Price_Actual <>0)
AND CASE WHEN
(Pod_Code = 'DI' THEN A.SpellAdmissionDate = G.SpellAdmissionDate) END
GROUP BY Pod_Code
ORDER BY Pod_Code;
Привет,
Я написал приведенный выше код, и я попытался использовать мой CASE WHEN
заявление как в WHERE
и JOIN
область без радости. Я пытаюсь добиться того, чтобы, когда POD-код был DI, то также связывались данные, ТОЛЬКО с той же датой допуска, что в настоящее время строки дублируются. Проблема в том, что я не могу просто ссылаться на это поле, так как не у каждой строки есть дата поступления, и поэтому это вызывает проблемы с выводом. До сих пор я читал различные решения на сайте и пытался адаптировать их к этому контексту, но без особой радости (не запускается, не выдает сообщений об ошибках и т. Д.). Любая помощь будет принята с благодарностью.
С уважением, Sie
2 ответа
Это можно выразить с помощью простого предложения ИЛИ:
AND (A.SpellAdmissionDate = G.SpellAdmissionDate OR Pod_Code != 'DI' OR Pod_Code IS NULL)
В случае, если Pod_Code не обнуляется, это сокращается до:
AND (A.SpellAdmissionDate = G.SpellAdmissionDate OR Pod_Code != 'DI')
Смотрите правильный синтаксис для использования оператора CASE в предложении WHERE ниже
AND
A.SpellAdmissionDate= CASE WHENPod_Code = 'DI' THEN G.SpellAdmissionDate END