Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Условие в where  [new]
Crau4
Member

Откуда: Казань
Сообщений: 5
Задача стоит следующая. У нас есть галочка. Если true, то условие, если false, то выводятся все поля.

select *
from Sale
where
case author
when Ident = true then 3

где Ident - галочка. Пробовал писать так, но не получается.
18 окт 12, 15:13    [13341042]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
это вы наверно С++ изучали раньше )
загуглите "case sql"
18 окт 12, 15:15    [13341063]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
Spinifex
Member

Откуда:
Сообщений: 55
Если правильно понял то так:
select *
from Sale
where Ident = false or author = 3


Т.е. если флаг равен false строку выводим, а если true, то накладываем условие по столбце author.
18 окт 12, 15:20    [13341096]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Spinifex
select *
from Sale
where Ident = false or author = 3



=) вы так выведите записи у которых Ident = false, либо те, у которых поле author = 3
18 окт 12, 15:23    [13341122]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
Spinifex
Member

Откуда:
Сообщений: 55
Александр52,

Да, это так. Спасибо, кэп! =)
18 окт 12, 15:27    [13341173]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
Crau4
Member

Откуда: Казань
Сообщений: 5
да. работаю на C#.

Spinifex, данное решение мне не подходит, так как оно выведет мне или или. а мне нужно, что бы при флаге false мне выводились sales, у которых id-шник author'а равен 3.
18 окт 12, 15:28    [13341185]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Spinifex
Александр52,

Да, это так. Спасибо, кэп! =)


если для вас это очевидно - зачем размещать заведомо ошибочный комментарий?
18 окт 12, 15:29    [13341198]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
Crau4
Member

Откуда: Казань
Сообщений: 5
Александр52
загуглите "case sql"


уже гуглил. пробовал так же такую конструкцию:

select *
from Sale
where
case
when Ident = true then author = 3
end

все равно не выходит
18 окт 12, 15:34    [13341239]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
DECLARE @Ident BIT='true';

SELECT *
FROM Sale
WHERE @Ident='true' AND author=3
UNION ALL
SELECT *
FROM Sale
WHERE @Ident='false';
18 окт 12, 15:34    [13341245]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
А как Вам такой вариант?
DECLARE @Ident BIT='true';

SELECT *
FROM Sale
WHERE author=ALL(SELECT 3 WHERE @Ident='true');
18 окт 12, 15:38    [13341290]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
А как Вам такой вариант?
DECLARE @Ident BIT='true';

SELECT *
FROM Sale
WHERE author=ALL(SELECT 3 WHERE @Ident='true');
Правда, это только для примитивного условия author=3
18 окт 12, 15:40    [13341306]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
bormental
Member

Откуда:
Сообщений: 90
Crau4
да. работаю на C#.

Spinifex, данное решение мне не подходит, так как оно выведет мне или или. а мне нужно, что бы при флаге false мне выводились sales, у которых id-шник author'а равен 3.



select *
from Sale
where
case
when ( (Ident = false and author = 3) or Ident = true) then 1
else -1
end >0
18 окт 12, 16:08    [13341605]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
bormental
Crau4
да. работаю на C#.

Spinifex, данное решение мне не подходит, так как оно выведет мне или или. а мне нужно, что бы при флаге false мне выводились sales, у которых id-шник author'а равен 3.



select *
from Sale
where
case
when ( (Ident = false and author = 3) or Ident = true) then 1
else -1
end >0
А почему не так?
select *
from Sale
where Ident = true or author = 3
?
18 окт 12, 16:46    [13341899]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
bormental
пропущено...



select *
from Sale
where
case
when ( (Ident = false and author = 3) or Ident = true) then 1
else -1
end >0
А почему не так?
select *
from Sale
where Ident = true or author = 3
?
Правда, прочитал стартовый пост, а там, оказывается, речь идёт о "всех полях"!
Тогда я пас. Вообще ни черта в этой задаче не понимаю. Так прекрасно сформулирована.
18 окт 12, 16:48    [13341937]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
bormental
Member

Откуда:
Сообщений: 90
2 iap

согласен. формулировка задачи туманная. самый простой вариант Ваш,конечно...если мы правильно поняли автора темы.
Но почему то кажется что не все так просто. а то бы он составил такой простой запросик сам
18 окт 12, 17:21    [13342290]     Ответить | Цитировать Сообщить модератору
 Re: Условие в where  [new]
OlM
Guest
Что-то мне подсказывает, что ТС хочет получить такой запрос:

SELECT *
FROM Sale
WHERE @Ident = 0 OR Author = 3

или даже

SELECT *
FROM Sale
WHERE @Ident = 0 -- Если не требуется фильтрация по авторам, возвращаем все записи
OR Author = @ParticularAuthor  -- или возвращаем только конкретного автора


Где
- "галочка" @Ident - это не битовое поле в таблице Sale, а параметр от вовсе даже несвязанного чекбокса на форме интерфейса;
- @ParticularAuthor - параметр для фильтрации по авторам.

Я, правда, в таких случаях использую конструкцию типа:
SELECT *
FROM Sale
WHERE Author = CASE WHEN @Ident = 0 THEN Author ELSE @ParticularAuthor END


Правда, чтобы эта конструкция работала правильно и быстро, нужно уделять внимание еще следующим обстоятельствам:
- поле Author должно быть проиндексировано
- поле Author не должно содержать NULL, или должен быть включен режим, при котором сравнения NULL с NULL возвращает TRUE

Автор, Вам надо бы научиться четко излагать свои мысли, это здорово поможет прежде всего Вам. А то у нас тут уже конкурс телепатов наметился.
18 окт 12, 22:16    [13343470]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить