2012-06-12 2 views
0

Хорошо, я сделал много исследований по этой теме, прежде чем задавать вопрос, но чтобы воспользоваться моей конкретной ситуацией. В настоящее время мой код выглядит следующим образом:Использование IF логики в том, где статья

SELECT RTRIM(logtype)+'-'+RTRIM(servicenbr)+'-'+CONVERT(varchar(25), idserv) as CaseNbr, (CASE WHEN tn.TeamText IS NULL THEN 'HELPDESK' WHEN tn.TeamText like '' THEN 'HELPDESK' ELSE tn.TeamText END) as SourceTeam, (tn2.TeamText) as DestinationTeam 
FROM teamnames as tn2 
    LEFT OUTER JOIN caseaudit AS ca 
    ON tn2.teamID = ca.referteamID2 
    LEFT OUTER JOIN openstatus As os 
    ON ca.logno = os.logno 
    LEFT OUTER JOIN teamnames as tn 
    ON ca.referteamid1 = tn.teamid 
WHERE CONVERT(smalldatetime,ca.dModLast,101) BETWEEN '2012-06-04' AND '2012-06-11' 

--NEED TO PUT IF CLAUSE HERE 

ORDER BY DestinationTeam 

В частности, мой IF условие или случай, когда необходимо проверить, чтобы увидеть

WHERE ca.asggrp1 <> ca.asggrp2 
AND ca.referteamid1 <> ca.referteamid2 AND tn2.isactive = 1 AND tn2.groupid = 18. 

If they are equal, then the ticket should be ignored UNLESS 
ca.asggrp1 = 'CLIENT' AND ca.asggrp2 = 'CLIENT' 
AND ca.referteamid1 <> ca.referteamid2 AND tn2.isactive = 1 AND tn2.groupid = 18. 

EDIT:

Alright ... давайте попробуем это. Запрос должен всегда тянуть дела с ограничением:

WHERE ca.referteamid1 <> ca.referteamid2 AND tn2.isactive = 1 AND tn2.groupid = 18 

Кроме того, я хочу, чтобы ограничить результаты до момента, когда ca.asggrp1 <> ca.asggrp2, когда они оба равны «КЛИЕНТ»

EDIT, за исключением:

Еще одна попытка здесь ... Я потерял аудиторию. Это лучшее объяснение, которое я могу дать тому, что я пытаюсь сделать.

SELECT RTRIM(logtype)+'-'+RTRIM(servicenbr)+'-'+CONVERT(varchar(25), idserv) as CaseNbr, (CASE WHEN tn.TeamText IS NULL THEN 'HELPDESK' WHEN tn.TeamText like '' THEN 'HELPDESK' ELSE tn.TeamText END) as SourceTeam, (tn2.TeamText) as DestinationTeam 
FROM teamnames as tn2 
    LEFT OUTER JOIN caseaudit AS ca 
    ON tn2.teamID = ca.referteamID2 
    LEFT OUTER JOIN openstatus As os 
    ON ca.logno = os.logno 
    LEFT OUTER JOIN teamnames as tn 
    ON ca.referteamid1 = tn.teamid 
WHERE CONVERT(smalldatetime,ca.dModLast,101) BETWEEN '2012-06-04' AND '2012-06-11' 
AND ca.referteamid1 <> ca.referteamid2 AND tn2.isactive = 1 AND tn2.groupid = 18 
----AND (ca.asggrp1 <> ca.asggrp2 UNLESS ca.asggrp1 = 'CLIENT' AND ca.asggrp2 = 'CLIENT') 
ORDER BY DestinationTeam 
+0

Что вы подразумеваете под словом «если они равны»? – Blorgbeard

+1

Если, если ... вы можете показать образцы данных и желаемые результаты для каждого случая? Я знаю, что проблема с вашим словом имеет смысл для вас, но другим может быть довольно сложно отступить от него ... –

+0

Проверьте редактирование. –

ответ

1

Я чувствую себя идиотом. Мне просто нужно было использовать простой OR.

AND (ca.asggrp1 <> ca.asggrp2 OR ca.asggrp1 = 'CLIENT' AND ca.asggrp2 = 'CLIENT') 

Я думаю, мы все время усложняем вещи.

Смежные вопросы