2011-01-12 4 views
0

Я хочу иметь простое условие в моем где положение, на одной из колонн, как:запутанным, где положение в SQL Server

Когда @PostTypeid is null то где должен быть PostTypeid in (4,5) и если @PostTypeid is not null тогда, когда положение должно быть PostTypeId = @PostTypeId

Я использую случай для этой цели, но я думаю, что меня путают с синтаксисом. Вот что я придумал до сих пор:

(PostTypeid = case(@PostTypeId) when null then in (4,18) else @PostTypeId end) 

Ошибка при использовании в, я не думаю, что это допустимый синтаксис. Каков правильный способ сделать это? Благодарю. Я попытался переложить фигурные скобки на несколько других мест, но напрасно.

Благодаря

+0

Я даже использовал '' (case (@PostTypeId), когда null, а затем PostTypeId в (4, 18) else PosttypeId = @PostTypeId end) '' и sql вообще не понравилось! – iamserious

+0

Ваша логика не имеет смысла. @PostTypeid может быть null и 4 одновременно? – gbn

+0

@gbn: если передано 4 или 18, тогда мне нужно выбрать сообщения в этом типе id, если ничего не передано (передается значение null), я хочу выбирать сообщения из обоих идентификаторов. Означает ли моя логика, что она может быть нулевой и 4 одновременно? Я не могу это увидеть (из-за пива, который у меня был вчера), можете ли вы объяснить больше? – iamserious

ответ

8

Что-то вроде:

WHERE 
    (@PostTypeID IS NULL AND PostTypeId IN (4, 5)) OR 
    (@PostTypeId IS NOT NULL AND PostTypeID = @PostTypeID) 

возможно?

+0

d'oh! Facepalm! почему я не подумал об этом! Спасибо, Мэтт! Наверное, я был одержим решением проблемы с ** case **. (или глупо пиво, которое у меня было вчера), я думаю, что у меня было слишком много!) – iamserious

+0

В вашем коде есть небольшое несоответствие фигурных скобок. М-р Мэтт, его предполагается быть '' ((@PostTypeID IS NULL AND PostTypeId IN (4, 18)) ИЛИ (@PostTypeId не является NULL, а PostTypeID = @PostTypeID)), но я уверен, что вы это понимаете. большое спасибо! – iamserious

+0

ой, конечно, я не упоминал, что у меня есть другие условия в моей статье, и это всего лишь один из них, поэтому ваш код идеален, если это единственное условие, моя ошибка, извините! – iamserious

-2

Вы косяк использование = и операторов в одном операторе

EDIT:

(PostTypeid = случай (@PostTypeId) при нулевой затем в (4,18) еще @PostTypeId конец)

Если значение @PostTypeId равно нулю, оно будет выглядеть следующим образом.

(PostTypeid = in (4,8)) 

и это синтаксическая ошибка.

case(@PostTypeID) when IS NULL then PostyTypeId in (4,18) else PostTypeId = PostTypeId 

этот случай должен возвращать единый результат.

+0

не могли бы вы объяснить, пожалуйста? – iamserious

+0

Привет, я уже пробовал эту версию, прежде чем я разместил здесь.Infact, если вы видите мой комментарий по моему вопросу, я уже упоминал об этом. это не работает вообще. – iamserious

+0

Я не был уверен в этом эфире, но у вас есть ответ. Поэтому проблема решена. ;-). А также я сделал опечатку вместо того, чтобы писать не могу ... которые объясняют эти два голоса. –

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