Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос по оператору case  [new]
ned help
Guest
Добрый день. Как можно учесть все варианты при помощи оператор Case
Например есть таблица T
Id Fio Food color size
1 Смирнов Телевизор Черный 21
И в ней данные , много данных я их не привожу. Смысл в том что мне надо отобрать все товары которые могли быть куплены тов Смирновым и являться черными телевизорами размером 21 . Суть в том что в этой таблице могут в каждом из полей содержаться ноли Is null и надо написать такой запрос. То есть учесть эту возможность. Очевидно это как - то через case
select fio , food, color, size
from T
where fio = 'Смирнов' and food = 'телевизор' and color = 'черный' and size = '21'
24 авг 11, 18:49    [11173549]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
iljy
Member

Откуда:
Сообщений: 8711
ned help,

и что с того, что могут содержаться null? Ваше условие их не выберет.
24 авг 11, 19:14    [11173645]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
ned help
Guest
iljy,
Если ноли то нет - как оно выберет если ноли. если точное значение выберет интервал выберет а ноль нет. Или нет? А даже если и выберет смысл задачи сводиться к тому что если в записи есть хоть один пустой (ФИО, Размер, цвет и тд) то написать -
" Обратите внимание"
24 авг 11, 19:31    [11173715]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
iljy
Member

Откуда:
Сообщений: 8711
ned help
iljy,
Если ноли то нет - как оно выберет если ноли. если точное значение выберет интервал выберет а ноль нет. Или нет? А даже если и выберет смысл задачи сводиться к тому что если в записи есть хоть один пустой (ФИО, Размер, цвет и тд) то написать -
" Обратите внимание"

Теперь еще что-то написать надо. Может вы для начала задачу полностью сформулируете? В соответствии с Рекомендациями, особенно пп 4 и 6.
24 авг 11, 20:12    [11173858]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
ned help
Guest
iljy,

Ага. Вот смотрить задача. Есть таблица T В ней 5 столбцов столбца Id , fio , food, color, size
задание отобрать все товары которые могли быть куплены тов Смирновым и являться черными телевизорами размером 21. То есть здесь 4 переменные - 1 столбец - 1 переменная. И нужно учесть те поля в конкретных записях что могут быть нолями.
Id Fio Food color size
1 Смирнов Телевизор Черный 21

Вот например, если fio неизвестно , а все остальное есть Телевизор Черный 21 - то написать - " Обратите внимание"
Мне не надо просто выбрать как я показывал ранее мне надо учесть возможные ноли в полях и пометить их. То есть есть 4 записи - просто выбираем . Есть 3 , 2 , 1 , 0 - написать " Обратите внимание"
24 авг 11, 20:26    [11173906]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
iljy
Member

Откуда:
Сообщений: 8711
ned help,

в условии пишете (fio = 'Смирнов' or fio is null) and такие же условия для остальных полей. "Обрати внимание" где надо написать - в отдельном поле или в том, которое NULL? Если NULL - то надо не case, а ISNULL использовать.
24 авг 11, 20:59    [11174025]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
ned help
Guest
iljy, да безусловно is null тоже используется. Писать надо допустим в отдельном столбце. А вообще открою вам страшную тайну - писать вообще ничего не надо( в результатах запроса просто столбцы без пояснительного столбца, в ячейках тем более) - это я для формулировки задачи добавил что бы мне не предложили просто в предложении where все ограничить. Так вот у меня эти(часть этих) столбцов берутся из соединения с другими таблицами. И там вполне может возникнуть ноль. Case нужел для того что-бы рассмотреть ситуацию вообщем. Смотрите еще раз
"Те что могут быть" ... Это и те что есть и те что могут быть скрыты за неизвестными нолями.
24 авг 11, 21:26    [11174101]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
iljy
Member

Откуда:
Сообщений: 8711
ned help,

я не понимаю, чего вы хотите услышать. Хотите использовать CASE - посмотрите в боле синтаксис и используйте. Вопрос то в чем?
24 авг 11, 21:48    [11174166]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
ned help
Guest
iljy,

Я не знаю как? Не понимаю. смотрел более простые примеры понятны а этот неочень. Там везде для 1 го столбца разбирается - здесь 4
24 авг 11, 21:56    [11174193]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
iljy
Member

Откуда:
Сообщений: 8711
ned help,

какого еще столбца?? В CASE используются выражения, количество используемых в них полей ничем не регламентируется.
24 авг 11, 22:00    [11174207]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
ned help
Guest
iljy,

тык я не спорю что - там много. Я говорю я могу сделать для 1 столбца а для 4 х не умею. Хотя возможность я не оспариваю. Тык мож мне кто нарисует кусочек кода хотя бы для 2х столбцов а ?
24 авг 11, 22:04    [11174228]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31979
ned help
Я говорю я могу сделать для 1 столбца а для 4 х не умею
Скопировать 4 раза, разделив запятыми.

Что то я тоже не понял, что вам надо. Попробуйте сформулировать ещё раз.
24 авг 11, 22:06    [11174231]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
iljy
Member

Откуда:
Сообщений: 8711
ned help,

CASE WHEN fio is null or food is null then 'Обратите внимание' else '' end
24 авг 11, 22:10    [11174250]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
ned help
Guest
iljy,

Спасибо. Буду пробовать.
24 авг 11, 22:15    [11174263]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по оператору case  [new]
f070214
Member

Откуда:
Сообщений: 35
А использование CASE принципиально? На мой взгляд, в данном случае использование ISNULL целесообразнее:

if not OBJECT_ID ('tempdb.dbo.#t') is null drop table #t;
go

create table #t
  ( Id		integer	identity
  , Fio		varchar (50)
  , Food	varchar (50)
  , Color	varchar (50)
  , Size	integer );
go

insert	#t (Fio, Food, Color, Size)
select	'Смирнов',	'Телевизор',	'Черный',	21		union
select	null,		'Телевизор',	'Черный',	21		union
select	'Смирнов',	null,			null,		21		union
select	null,		null,			'Черный',	null	union
select	null,		null,			null,		null;

select	*
from	#t;

select	Id, 
		ISNULL (Fio, 'ОБРАТИ ВНИМАНИЕ!') as Fio, 
		ISNULL (Food, 'ОБРАТИ ВНИМАНИЕ!') as Food, 
		ISNULL (Color, 'ОБРАТИ ВНИМАНИЕ!') as Color, 
		ISNULL (Size, 0) as Size
from	#t
where	ISNULL (Fio, 'Смирнов') = 'Смирнов'
	and ISNULL (Food, 'Телевизор') = 'Телевизор'
	and ISNULL (Color, 'Черный') = 'Черный'
	and ISNULL (Size, 21) = 21;
25 авг 11, 09:53    [11175465]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить