С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 29.01.2015
Сообщений: 21
1

IIF и Dsum в запросе

01.02.2017, 00:18. Показов 1510. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет и доброе здравье всем. У меня полное недоумение по поводу VB access. По этому прошу мне помоч.
Как можно представить нижеприведенную функцию в VB. Заранее спосибо кто откликнетса!
Visual Basic
1
2
3
4
5
IIf(hodID=24,DSum("cuc","NAXd","hod<125"),
IIf(hodID=25 or [hodID]=26 ,DSum("cuc","NAXd","hod<34"),
IIf(hodID=34,DSum("cuc","NAXd","hod>34 and hod<70"),
IIf(hodID=35,DSum("cuc","NAXd","hod>35 and hod<43"),
IIf(hodID=43,DSum("cuc","NAXd","hod>43 and hod<47"),0)))))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.02.2017, 00:18
Ответы с готовыми решениями:

Функция DSUM в запросе
Добрый вечер! Подскажите как правильно описать в функции DSUM параметры для правильного подсчета...

Суммировать по двум критериям в запросе DSUM
Добрый день, Новичок в аксес, если было не ругайте, мне кажется я еще все пересмотрела. В екселе...

IIF в запросе
Здравствуйте, нуждаюсь в помощи в задании, есть запрос с IIF, &quot;К оплате:...

IIF в запросе
привет!подскажите,пожалуйста,как с помощью IIFсделать такой запрос: у меня есть таблицы в которых...

12
4082 / 1462 / 401
Регистрация: 07.08.2013
Сообщений: 3,657
01.02.2017, 01:06 2
так вы уже все сами написали - в чем проблема -то?
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
01.02.2017, 04:05 3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function MySum
select case hodID
  case 24
     MySum= DSum("cuc","NAXd","hod<125"),
  case 25, 26
     MySum= DSum("cuc","NAXd","hod<34"),
  case 34
     MySum= DSum("cuc","NAXd","hod>34 and hod<70"),
  case 35
     MySum= DSum("cuc","NAXd","hod>35 and hod<43"),
  case 43
     MySum= DSum("cuc","NAXd","hod>43 and hod<47")
  case else
     MySum= 0
end select
end function
0
1 / 1 / 0
Регистрация: 29.01.2015
Сообщений: 21
01.02.2017, 07:25  [ТС] 4
Snipe в запросе таких IIf dsum очень много.
0
Модератор
Эксперт MS Access
12106 / 4966 / 791
Регистрация: 07.08.2010
Сообщений: 14,593
Записей в блоге: 4
01.02.2017, 07:36 5
Цитата Сообщение от акь1971 Посмотреть сообщение
Snipe в запросе таких IIf dsum очень много.
может подобные итоги надо делать в VBA
без примера базы и пояснения по требуемому --сложно понять потребности
0
Эксперт MS Access
7447 / 4581 / 302
Регистрация: 12.08.2011
Сообщений: 14,286
01.02.2017, 07:38 6
1.Нужен пример данных
2.Необходимо добавить таблицу интервалов с полями от и до.
0
1 / 1 / 0
Регистрация: 29.01.2015
Сообщений: 21
01.02.2017, 14:37  [ТС] 7
вот пример базы. если использовать iif и dsum на одном поле выдает сообщение too complex
Вложения
Тип файла: rar M002.rar (61.0 Кб, 16 просмотров)
0
1 / 1 / 0
Регистрация: 29.01.2015
Сообщений: 21
01.02.2017, 17:54  [ТС] 8
Всем привет и спосибо. Спосибо особенно texnik-san вам. Доброе вам всем здоровье
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
01.02.2017, 22:01 9
Цитата Сообщение от акь1971 Посмотреть сообщение
Snipe в запросе таких IIf dsum очень много.
Если ОЧЕНЬ много, то на вашем месте я бы завела в базе дополнительную таблицу, условно назовем ее, TTT с тремя полями: hodID, hodMin, hodMax, пимерно такую:

hodID hodMin hodMax
24 0 125
25 0 34
34 34 70
35 35 43

И так далее. Ноль в колонке hodMin заменяет пропущенный минимум - я исходила из того, что знаения hod неотрицательные. Если это не так, вместо 0 исользуйе заведомо слишком маленькое отрицательное число, типа -999999999999. А вместо пропусков в столбце hodMax - заведомо слишком большое положительное число, типа 999999999999.

А затем просто добавляете эту таблицу TTT в запрос:

SQL
1
2
3
4
5
SELECT ВашаТаблица.hodID, 
  SUM(-1*(ВашаТаблица.hod>TTT.hodMin AND ВашаТаблица.hod<TTT.hodMax)*ВашаТаблица.cuc) AS SumCuc
FROM ВашаТаблица
  INNER JOIN TTT ON ВашаТаблица.hodID = TTT.hodID
GROUP BY ВашаТаблица.hodID;
Добавлено через 2 минуты
Тут хитрость вот в чем: логическое выражение (ВашаТаблица.hod>TTT.hodMin AND ВашаТаблица.hod<TTT.hodMax) принимает значение либо 0 (ложь), либо -1 (итина). Домножаем еще на одну -1 и на поле cuc - и просто суммируем.
0
10920 / 5611 / 1426
Регистрация: 05.10.2016
Сообщений: 15,860
01.02.2017, 22:24 10
Цитата Сообщение от акь1971 Посмотреть сообщение
Как можно представить нижеприведенную функцию в VB.
"Поумничаю" малость - лучше завести отдельную таблицу с параметрами расчёта (от и до) + значения.
Это даст возможность настраивать параметры пользователю (где то в блоке настроек параметров приложения)
Тут нужно продумать: Нужны ли концы диапазонов?

А дальше функция расчёта согласно таблицы MAX значений (диапазонов) и текущих параметров ввода ...
Как то так.
(Иль я чего не так понял)
Успехов!
0
1 / 1 / 0
Регистрация: 29.01.2015
Сообщений: 21
02.02.2017, 00:18  [ТС] 11
texnik-san лучший вариантом я думаю ваш первый ответ, исходя с этого я слепил остальное и оно работает, но не могу понять как его сделать универсальным, чтоб не использовалось для одной таблицы. Прошу извенить за недоумения

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Function MySum(ByVal hodID As Variant, ByVal cuc As Variant, ByVal NAXd As Variant, ByVal hod As Variant) As Double
Select Case hodID
  Case 3
      MySum = Nz(DSum("cuc", "NAXd", "hod>3 and hod<18"))
 Case 6
      MySum = Nz(DSum("cuc", "NAXd", "hod>6 and hod<9"))
 Case 9
      MySum = Nz(DSum("cuc", "NAXd", "hod>9 and hod<18"))
 Case 13
      MySum = Nz(DSum("cuc", "NAXd", "hod>13 and hod<18"))
 Case 18
      MySum = Nz(DSum("cuc", "NAXd", "hod>18 and hod<22"))
 Case 22
      MySum = Nz(DSum("cuc", "NAXd", "hod<22"))
 Case 24
     MySum = Nz(DSum("cuc", "NAXd", "hod>25 and hod<125"))
 Case 25, 26
     MySum = Nz(DSum("cuc", "NAXd", "hod>26 and hod<34"))
     Case 34
      MySum = Nz(DSum("cuc", "NAXd", "hod>35 and hod<70"))
      Case 35
      MySum = Nz(DSum("cuc", "NAXd", "hod>35 and hod<43"))
      Case 43
      MySum = Nz(DSum("cuc", "NAXd", "hod>43 and hod<47"))
      Case 47
      MySum = Nz(DSum("cuc", "NAXd", "hod>47 and hod<56"))
      Case 56
      MySum = Nz(DSum("cuc", "NAXd", "hod=57"))
      Case 58
      MySum = Nz(DSum("cuc", "NAXd", "hod>58 and hod<61"))
      Case 61
      MySum = Nz(DSum("cuc", "NAXd", "hod>61 and hod<70"))
      Case 70
      MySum = Nz(DSum("cuc", "NAXd", "hod>70 and hod<79"))
      Case 75
      MySum = Nz(DSum("cuc", "NAXd", "hod>75 and hod<79"))
      Case 79
      MySum = Nz(DSum("cuc", "NAXd", "hod>79 and hod<84"))
      Case 84
      MySum = Nz(DSum("cuc", "NAXd", "hod>84 and hod<91"))
      Case 91
      MySum = Nz(DSum("cuc", "NAXd", "hod>92 and hod<105"))
      Case 92
      MySum = Nz(DSum("cuc", "NAXd", "hod>92 and hod<95"))
      Case 95
      MySum = Nz(DSum("cuc", "NAXd", "hod>95 and hod<105"))
      Case 105
      MySum = Nz(DSum("cuc", "NAXd", "hod>106 and hod<125"))
      Case 106
      MySum = Nz(DSum("cuc", "NAXd", "hod>106 and hod<109"))
      Case 109
      MySum = Nz(DSum("cuc", "NAXd", "hod>109 and hod<114"))
      Case 114
      MySum = Nz(DSum("cuc", "NAXd", "hod=115"))
      Case 116
      MySum = Nz(DSum("cuc", "NAXd", "hod>116 and hod<119"))
      Case 119
      MySum = Nz(DSum("cuc", "NAXd", "hod=120"))
      Case 121
      MySum = Nz(DSum("cuc", "NAXd", "hod=122"))
      Case 123
      MySum = Nz(DSum("cuc", "NAXd", "hod=124"))
      Case 125
      MySum = Nz(DSum("cuc", "NAXd", "hod>126 and hod<147"))
      Case 126
      MySum = Nz(DSum("cuc", "NAXd", "hod>126 and hod<135"))
      Case 135
      MySum = Nz(DSum("cuc", "NAXd", "hod>135 and hod<140"))
      Case 140
      MySum = Nz(DSum("cuc", "NAXd", "hod=141"))
      Case 142
      MySum = Nz(DSum("cuc", "NAXd", "hod>142 and hod<147"))
      Case 147, 148
      MySum = Nz(DSum("cuc", "NAXd", "hod>26 and hod<147"))
      Case 149
      MySum = Nz(DSum("cuc", "NAXd", "hod<22")) - Nz(DSum("cuc", "NAXd", "hod>26 and hod<147"))
      Case 151
      MySum = Nz(DSum("cuc", "NAXd", "hod<22")) - Nz(DSum("cuc", "NAXd", "hod>26"))
        Case Else
     MySum = Nz(DSum("cuc", "NAXd", "hod=" & hodID))
     End Select
End Function
0
Эксперт MS Access
7447 / 4581 / 302
Регистрация: 12.08.2011
Сообщений: 14,286
02.02.2017, 05:25 12
Вы будете постоянно менять функцию при появлении нового hodID?
1
10920 / 5611 / 1426
Регистрация: 05.10.2016
Сообщений: 15,860
02.02.2017, 05:46 13
Цитата Сообщение от акь1971 Посмотреть сообщение
исходя с этого я слепил остальное и оно работает
Ну работает, и ладно, но это не правильно.

По опыту: Такие вещи делаются по таблице значений.
0
02.02.2017, 05:46
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.02.2017, 05:46
Помогаю со студенческими работами здесь

SUM и IIF в одном запросе
таблица1: id, klient, kgr, vid(&quot;посев&quot; или &quot;тех&quot;), kgr в общем от клиентов приходят семена двух...

Оператор IIF в запросе UPDATE
Здравствуйте, форумчане! Есть запрос на обновление месяца, месяц записан как целое число, так вот...

Почему не работает формула IIf в запросе?
Здравствуйте! В запросе формула: IIf(IsNull(); IIf(IsNull(); IIf(IsNull(); ; ); IIf(IsNull(); ; &amp;&quot;...

В запросе в операторе IIF оператор AND работает как OR
Здравствуйте! Вопрос, наверное, глупый.. Создаю запрос: Коды, Даты, Кол-во. Последний столбец через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Администрирован­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru