Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление пустых записей из запроса / 9 сообщений из 9, страница 1 из 1
19.04.2006, 11:23
    #33675764
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых записей из запроса
Есть SELECT из числовых полей таблицы.
Если таблица пустая, то в курсор всё равно попадает одна запись со значениями полей .NULL. Как от этого избавиться?
Если добавить в SELECT выбор ещё и из символьного поля, тогда создаётся нормальный курсор с 0 записями. Но этот вариант мне не подходит.
...
Рейтинг: 0 / 0
19.04.2006, 11:36
    #33675815
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых записей из запроса
Если таблица пустая, то SELECT НИЧЕГО не вернет!
Разберитесь с таблицей - источником для запроса.
С уважением, Алексей
...
Рейтинг: 0 / 0
19.04.2006, 14:21
    #33676658
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых записей из запроса
Aleksey-KЕсли таблица пустая, то SELECT НИЧЕГО не вернет!
Разберитесь с таблицей - источником для запроса.
С уважением, Алексей

В SELECTе некоторые поля суммируются.
Источник запроса - таблица пустая, это точно! Но если селект без символьного поля он выдаёт таблицу с одной записью. BROWSE показывает значение .NULL. во всех полях.
...
Рейтинг: 0 / 0
19.04.2006, 14:31
    #33676707
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых записей из запроса
SELECT не учитывает SET DELETE.., а BROWSE учитывает.
Как у вас с этим флагом?
С уважением, Алексей
...
Рейтинг: 0 / 0
19.04.2006, 15:07
    #33676830
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых записей из запроса
"Пустая" таблица - это значит

?Reccount("MyTable") = 0

Если количество записей больше нуля, то даблица НЕ пустая вне зависимости от того, видите ли Вы какие-либо записи через BROWSE или нет.

Код: plaintext
1.
2.
3.
4.
* Создаю новую таблицу (кусор)
create cursor test (f1 i, f2 i)
* Не заполняя его делаю выборку
select f1+f2 from test
...
Рейтинг: 0 / 0
19.04.2006, 15:37
    #33676942
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых записей из запроса
Код: plaintext
1.
2.
3.
4.
* Создаю новую таблицу (кусор)
create cursor test (f1 i, f2 i)
* Не заполняя его делаю выборку
select f1+f2 from test
[/quot]
Неееее, не так!
я не правильно сказал, там все поля суммируются
Вот как надо:
Код: plaintext
1.
create cursor test (f1 N( 15 , 2 ), f2 N( 15 , 2 ))
select sum(iif(f1<> 0 , 1 , 0 )), sum(f1), sum(f2) from test
...
Рейтинг: 0 / 0
20.04.2006, 14:16
    #33679369
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых записей из запроса
Начиная с VFP9 синтаксис Select-SQL более приближен к стандарту ANSI. Если используются аггрегирующие функции БЕЗ группировки (нет GROUP BY), то в результирующей выборке ВСЕГДА будет одна запись. Вне зависимости от факта наличия данных.

Это необходимо, чтобы отличать нулевую сумму от не существующей суммы.

"Избавляться" от этого не надо. Это стандартное поведение.

В принципе, обойти, конечно, можно. Например, так

Код: plaintext
1.
2.
create cursor test (f1 N( 15 , 2 ), f2 N( 15 , 2 ))
select  1  as num, sum(iif(f1<> 0 , 1 , 0 )), sum(f1), sum(f2) from test GROUP BY num

Но лучше привыкать к стандартному поведению.
...
Рейтинг: 0 / 0
20.04.2006, 14:36
    #33679448
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых записей из запроса
Буду знать.
Спасибо! :)
...
Рейтинг: 0 / 0
20.04.2006, 15:35
    #33679690
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых записей из запроса
Позволю еще себе дополнить ответ ВладимирМ.
1. И при этом в ваших полях с агрегатными функциями, если нет строк (кроме COUNT(*)) вернутся значения .NULL., а COUNT(*) вернет 0.
2. Неплохо бы было присвоить имена колонкам с агрегатными функциями, иначе VFP сам имена присвоит.
select sum(iif(f1<>0,1,0)) as Flag, sum(f1) AS F1, sum(f2) AS F2 from test

С уважением, Алексей
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление пустых записей из запроса / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]