ИСПОЛЬЗОВАНИЕ СЛУЧАЯ КОГДА-ЛИБО ГДЕ или ПРИСОЕДИНЯЙТЕСЬ

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
Другие вопросы по тегам