|
Чудеса в запросе | ☑ | ||
---|---|---|---|---|
0
User_Agronom
29.04.13
✎
16:57
|
Есть запрос.
в нем поле ВЫБОР КОГДА (СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) > 0) ТОГДА 2 ИНАЧЕ 1 КОНЕЦ КАК КоличествоНеНоль Значение получается NULL. (Выполняю запрос в консоли запросов) как так может быть? |
|||
1
Wobland
29.04.13
✎
16:58
|
ну показывай запрос
|
|||
2
Irbis
29.04.13
✎
16:58
|
КоличествоРасход = NULL ?
|
|||
3
Wobland
29.04.13
✎
16:59
|
а вообще, ты врёшь
|
|||
4
Flyd-s
29.04.13
✎
17:00
|
Естьnull(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход , 0)
|
|||
5
Ахиллес
29.04.13
✎
17:01
|
Ну соединение двух таблиц. Тупа нет суммы никакой, поэтому NULL
|
|||
6
Flyd-s
29.04.13
✎
17:02
|
ВЫБРАТЬ
ВЫБОР КОГДА null > 0 ТОГДА 2 ИНАЧЕ 1 КОНЕЦ КАК КоличествоНеНоль Дает 1, а не null |
|||
7
Wobland
29.04.13
✎
17:03
|
(2) (5) а ну и чо?
|
|||
8
User_Agronom
29.04.13
✎
17:07
|
(5) Я вообще-то думал, что либо 1 либо 2 буду получать(( откуда NULL вылазит?
|
|||
9
Wobland
29.04.13
✎
17:08
|
(8) пруфскрин закежь
|
|||
10
Ахиллес
29.04.13
✎
17:08
|
(7) Что нуичто? Если в выборке NULL то оно не может быть больше или меньше нуля и нулю не может быть равно. Сответственно возвращать будет не 2 или 1 а NULL
(8) Очевидно, что в запросе есть соединение нескольких таблиц. Оттуда и лезет. |
|||
11
Wobland
29.04.13
✎
17:09
|
(10) любая операция с нуллом даёт ложь
|
|||
12
Wobland
29.04.13
✎
17:09
|
(11) *сравнение
|
|||
13
Irbis
29.04.13
✎
17:10
|
(8) Ну нет у базы гармошки по такому запросу, он тебе NULL и пихает в ответ
|
|||
14
Ахиллес
29.04.13
✎
17:10
|
(12) А оно и не сравнивается. Оно само по себе есть NULL.ю
|
|||
15
User_Agronom
29.04.13
✎
17:11
|
(1) Вот он, в упрощенном виде:
ВЫБРАТЬ РАЗЛИЧНЫЕ Справочник1.Номенклатура КАК Номенклатура, Справочник1.Склад, РасходЯнварь.Расход КАК М1, РасходЯнварь.КоличествоНеНоль КАК К1 ИЗ (ВЫБРАТЬ ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад, СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК Расход ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатК, &Дат, Регистратор, , ) КАК ТоварыНаСкладахОстаткиИОбороты ГДЕ НЕ(ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот = 0 И ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход = 0 И ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход = 0) СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура, ТоварыНаСкладахОстаткиИОбороты.Склад) КАК Справочник1 ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад, СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК Расход, ВЫБОР КОГДА (СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) > 0) ТОГДА 2 ИНАЧЕ 1 КОНЕЦ КАК КоличествоНеНоль ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатК, ДОБАВИТЬКДАТЕ(&ДатК, МЕСЯЦ, 1), Регистратор, , ) КАК ТоварыНаСкладахОстаткиИОбороты СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура, ТоварыНаСкладахОстаткиИОбороты.Склад) КАК РасходЯнварь ПО Справочник1.Номенклатура = РасходЯнварь.Номенклатура И Справочник1.Склад = РасходЯнварь.Склад |
|||
16
Wobland
29.04.13
✎
17:12
|
(14) у него там функция агрегатная
v8: священный NULL и сложение |
|||
17
Wobland
29.04.13
✎
17:16
|
(15) ну и чо? левое соединение даёт нулл. нету подходящих записей
|
|||
18
Wern
29.04.13
✎
17:18
|
(16) У него агрегатная функция в условии, а не в значении поля смотри (6). Потому не важно NULL она или нет.
|
|||
19
Ахиллес
29.04.13
✎
17:18
|
(15) Можешь продолжать биться башкой в стену и причитать какая адинэс плохая, а можешь быстренько всё поправить. Естьnull тебе в помощь. Можешь в подзапрос предварительно обернуть для более простого понимания.
|
|||
20
Wobland
29.04.13
✎
17:19
|
засунь вот это в консоль, посмотри результат и больше не делай сомнительных утверждений
ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК Расход, | ВЫБОР | КОГДА СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) > 0 | ТОГДА 2 | ИНАЧЕ 1 | КОНЕЦ КАК КоличествоНеНоль | ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатК, ДОБАВИТЬКДАТЕ(&ДатК, МЕСЯЦ, 1), Регистратор, , ) КАК ТоварыНаСкладахОстаткиИОбороты | | СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Склад |
|||
21
Wobland
29.04.13
✎
17:26
|
до меня только сейчас дошло. чтобы при левом соединении не было нуллов, нужно исключить их из правой таблицы ;)
|
|||
22
User_Agronom
29.04.13
✎
17:27
|
(17) спасибо.
Что-то я и правда не подумал, что может не найти. |
|||
23
Aprobator
29.04.13
✎
17:27
|
(0) левое соединение и к гадалке не ходи.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |