работа со значениями Null

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

работа со значениями Null

Сообщение shady » 23.06.2006 (Пт) 10:53

Здравствуйте, посоветуйте пожалуйста.
в SQL запросе мне будет необходимо производить математические вычисления с полями, не во всех полях есть данные, очень часто бывает что из 50 полей с которыми мне нужно будет работать 30 пустые, т.е. в них значение Null и при сложении, умножении на null будет возвращен null. я пока вижу только такие варианты решения:
1. сделать UPDATE тем полям с какими я буду работать (учитывая что записей в таблице около 50 000, 50 полей я думаю будут обновляться довольного)
2. проверять на IsNull в iif и возвращать 0 если в поле Null

и тот, и другой способ я думаю достаточно медленны (второй думаю будет, в разы, выполняться дольше)

что еще можете посоветовать?
хотелось бы очень услышать мнение таких профессионалов как GSerg, Alibek, AndreyFedorov

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: работа со значениями Null

Сообщение GSerg » 23.06.2006 (Пт) 11:00

shady писал(а):хотелось бы очень услышать мнение таких профессионалов как ...

После прочтения данного пропало желание отвечать :neutral:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.06.2006 (Пт) 11:12

Тема обречена на отсутствие появления в ней мнении таких профессионалов как GSerg, Alibek, AndreyFedorov

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 23.06.2006 (Пт) 11:14

приношу свои извенения, ни кого не хотел обидеть, конечно же я не сомневаюсь что на форуме присутсвуют профессионалы, кроме тех кого я перечислил, но так как я относительно нечасто захожу на форум, и в основном видел ответы перечисленных мной участников. У меня сложилось мнение, что Вы профессионалы высочайшего класса, которые могут и хотят помочь людям только начинающим изучать программирование на VB.
Еще раз извиняюсь перед всеми участниками форума, если кого-то задели мои слова.

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 23.06.2006 (Пт) 13:24

если SQLServer юзай
Код: Выделить всё
isnull(pole1,0)


где pole1 поляна где может быть null

А если не SQLServer, то не знаю...


а попу лизать все равно нехорошо...
Пора уже всем хорошим людям собраться и убить всех плохих людей.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.06.2006 (Пт) 14:26

2 GB826 Ему это не подойдет. Ему надо NULL + 1 = 1

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.06.2006 (Пт) 14:40

Как раз подойдёт.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.06.2006 (Пт) 14:52

GSerg писал(а):Как раз подойдёт.

Предлагаешь что-то типа Select IsNull(f1+f2+f3+f4, IsNull(f1+f2+f3, IsNull(f1+f2, IsNull(f1, 0)))) from t1 :?: :shock:

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 23.06.2006 (Пт) 15:02

shady
Делай апдейт, это проще, чем мутить запросы, да и делается один раз. А если и в дальнейшем будешь пользоваться таблицей, то запрети добавление null и проставь default равным нулю.
Лучший способ понять что-то самому — объяснить это другому.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.06.2006 (Пт) 15:22

Код: Выделить всё
SELECT CAST(COALESCE(FieldMayBeNull,0) AS money) AS 'AllwaysNotNull' FROM Table1

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 23.06.2006 (Пт) 15:38

GB826
если SQLServer юзай

если бы....
DBF :(...

Nicky
Предлагаешь что-то типа Select IsNull(f1+f2+f3+f4, IsNull(f1+f2+f3, IsNull(f1+f2, IsNull(f1, 0)))) from t1

в конечном итоге наподобие такого получится.. дело в том что когда делали программу, неправильно сделали БД.
она выглядит примерно так (для пользователя)
======================
товар1 цена1
товар2 цена2
...
товар6 цена6
======================
а структура таблицы такая:
tov1, tov2, tov3, ... tov6 ... cen1, cen2, ....cen6
надеюсь немного понятно...

Antonariy
Делай апдейт, это проще, чем мутить запросы, да и делается один раз. А если и в дальнейшем будешь пользоваться таблицей, то запрети добавление null и проставь default равным нулю.

конечно можно, раз сделал и все, но думаю это сильно отразится на времени работы запроса (пока там все 50*50000 записей обновятся), можно конечно для пользователя анимашку поставить что-то типа виндузовых авишек...

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 24.06.2006 (Сб) 0:29

Так апдейт одноразовый, потом вместо Null пихай 0....Пользователю на это положить...


дело в том что когда делали программу, неправильно сделали БД.
она выглядит примерно так (для пользователя)
======================
товар1 цена1
товар2 цена2
...
товар6 цена6
======================
а структура таблицы такая:
tov1, tov2, tov3, ... tov6 ... cen1, cen2, ....cen6


Случаем это не 1С? Уж больно меня подташнивать начало...
Да и вообще это форум бо ВБ :о)) :roll:
Пора уже всем хорошим людям собраться и убить всех плохих людей.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList