powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / значения нескольких полей посчитать
10 сообщений из 10, страница 1 из 1
значения нескольких полей посчитать
    #39942680
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте и не болейте!

Прошу помочь по возможности. Я даже не знаю как было бы правильнее тему для моего вопроса назвать. Конечно же с такими дурацкими вопросами может обратиться только самоучка как я, но книжки стараюсь читать)))

В старой-старой базе есть таблица, в которой хранятся условия ID заказчика и последовательное НЕОПРЕДЕЛЕННОЕ кол-во булевых полей с названиями регионов. Сейчас понадобилось выводить данные о кол-ве активных регионов у каждого ID.

Через DAO циклом по всем полям я запросто могу произвести обсчет и вывести в результирующую таблицу, но проще напрячься и заняться полной переделкой баз, в которых задействован такой старый и кривой метод хранения исходных значений условий. Времени как обычно на это нет несмотря даже на карантин.

Очень хотелось одним запросом, или комплексом запросов, без применения VBA вывести необходимое в таком виде (названия регионов не нужны):

ID REGIONS
9 2
12 3
14 1
16 4

Возможно ли вообще такое при условии, что конечное кол-во полей с регионами неизвестно т.е. может меняться становиться как меньше, так и больше (в базе пользователи могут удалять регион, а могут и добавить новый).

Я естественно облазил пол-интернета и пролистал весь форум здесь по критерию "значения нескольких полей" и т.п. - безрезультатно.
...
Рейтинг: 0 / 0
значения нескольких полей посчитать
    #39942691
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще выложить БД с таблицей? всё лишнее поудалять (включая референсы), оставив десяток записей, сжать-зипануть-приложить тут к сообщению. Ну и показать вручную созданный желаемый результат для именно оставленных в БД данных.
...
Рейтинг: 0 / 0
значения нескольких полей посчитать
    #39942692
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формально - нечто типа

Код: vbnet
1.
2.
3.
SELECT ID, 
       [Москва]+[Владимир]+[Рязань]+...+[Калуга] AS REGIONS
FROM [таблица-источник]
...
Рейтинг: 0 / 0
значения нескольких полей посчитать
    #39942694
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kulib,

Код: sql
1.
2.
SELECT t1.id, -([p1]*1+[p2]*1+[p3]*1+[p4]*1) AS Итого 
FROM t1;
...
Рейтинг: 0 / 0
значения нескольких полей посчитать
    #39942695
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,
Ну да... *1 наверно лишнее...
ну или вынести 1 за скобки, а потом убрать/сократить...
...
Рейтинг: 0 / 0
значения нескольких полей посчитать
    #39942696
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так долго соображал какого х.ра в примере 9 2 вместо 9 1 и 12 3 вместо 12 4, что забыл про оптимизацию...
...
Рейтинг: 0 / 0
значения нескольких полей посчитать
    #39942703
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kulib
....но проще напрячься и заняться полной переделкой баз, в которых задействован такой старый и кривой метод хранения исходных значений условий.
Вы абсолютно правильно все понимаете-с такой организацией хранения данных ничего путного не выйдет и метод хранения не бывает "кривой","старый" или "новый" он просто не правильный.
(а если населенных пунктов будет больше 256?)
...
Рейтинг: 0 / 0
значения нескольких полей посчитать
    #39942779
kulib
Очень хотелось одним запросом, или комплексом запросов, без применения VBA вывести необходимое
Не получится.
kulib
Через DAO циклом по всем полям я запросто могу произвести обсчет и вывести в результирующую таблицу
Если это очень срочно, то напишите функцию, выполняющую эти действия для указанного клиента. Ее используйте в запросе.
kulib
но проще напрячься и заняться полной переделкой баз, в которых задействован такой старый и кривой метод хранения исходных значений условий. Времени как обычно на это нет
Правильная мысль, и тут не нужно много времени.
1 Создать таблицы "Справочник регионов" (ID-счетчик, Название) и "Регионы клиентов" (ID клиента, ID региона, возможно флажок и пр.).
2. Наваять процедуру с тремя Recordset-ми, в которой в цикле по полям 1-й записи заполнить "Справочник регионов", а то же для каждой записи - заполнить "Регионы клиентов". Процедура небольшая, выполняется 1 раз.
3. В завершение - из вашей таблицы удалить все булевы поля и переименовать в "Справочник клиентов" (а если он уже есть - просто удалить таблицу.)
На всё - максимум полдня.
...
Рейтинг: 0 / 0
значения нескольких полей посчитать
    #39942812
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, кто откликнулся!

Я подозревал на 99%, что действительно идея патовая. Суммировать значения полей можно конечно запросто (как предлагают некоторые и это реализовано), основная проблема в том, что кол-во регионов уменьшается и увеличивается и если статично задать условие типа [p1]+[p2]+[p3], то в любом случае возникнет ошибка когда нет например [p3] (редко но всё же), или будет неправильный подсчёт при появлении нового [p4] (оно не посчитается т.к. его нет). Придется собраться с мыслями и приступить к масштабной переделке.

P.S. Да ну и конечно превышение 256 полей маловероятно, но всё же есть(((
...
Рейтинг: 0 / 0
значения нескольких полей посчитать
    #39943014
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий
kulib

Через DAO циклом по всем полям я запросто могу произвести обсчет и вывести в результирующую таблицу
Если это очень срочно, то напишите функцию, выполняющую эти действия для указанного клиента. Ее используйте в запросе.
Не смог не ответить благодарственным месседжем на совет между строк!))) Видимо от природной лени осознав все муки предстоящего мероприятия, обратил внимание на Ваш совет и о чудо, карета из тыквы обратно поехала :-) Спасибо!
Сделал всё-таки по-быстренькому функцию и продолжил свои карантикулы))) Если кто такой же есть как я, смотрите пример, мало-ли пригодится!
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Function TEST_RegionsCount(Код) As Integer

Dim dbs As Database, rstListSellers As Recordset, fld_CODE As Field
    Set dbs = CurrentDb
    Set rstListSellers = dbs.OpenRecordset("tbl_ListSellers")
    Set fld_CODE = rstListSellers.Fields!Код

rstListSellers.MoveFirst
Do
    If Код = fld_CODE Then
        '---попытка внедрения перебора полей
        For Each fld In rstListSellers.Fields
            '.OrdinalPosition выбрано в качестве стартового номера поля для обработки (кривовато), может по NAME с "Москва и МО" Fld.Properties("Name")?
            If fld.OrdinalPosition > 1 And fld.Value = True Then TEST_RegionsCount = TEST_RegionsCount + 1
        Next fld
    End If
    rstListSellers.MoveNext 'counter = counter + 1
Loop Until rstListSellers.EOF '(counter = count)

End Function


P.S. Но переделывать когда-то всё равно придется. Хоть бы не мне)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / значения нескольких полей посчитать
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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