Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / -1 / 0
Регистрация: 15.06.2017
Сообщений: 122

Ссылка на поле t2.paymentTotal может относиться к полям нескольких таблиц

08.05.2018, 22:17. Показов 3805. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я не нашел где это. Но запрос состоит из 3х частей. В вб это выглядет так.
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
s1 = ""
s1 = s1 & " SELECT t1.studentCode, "
s1 = s1 & " IIf(IsNull(t2.debtFirstPart),0,t2.debtFirstPart) AS debtFirstPart, "
s1 = s1 & " IIf(IsNull(t3.debtSecondPart),0,t3.debtSecondPart) AS debtSecondPart, "
s1 = s1 & " (debtSecondPart - debtFirstPart) As debt "
s1 = s1 & " FROM (students AS t1 "
s1 = s1 & " LEFT JOIN ( "
s1 = s1 & " SELECT t1.personID, "
s1 = s1 & " sum(t1.total) AS debtFirstPart "
s1 = s1 & " FROM payment As t1 "
s1 = s1 & " WHERE (((t1.personID) Like 'S*') "
s1 = s1 & " AND ((t1.[dateOfPayment]) Between #ST# And #TDDEPT#)) "
s1 = s1 & " GROUP BY t1.personID "
s1 = s1 & " ) As t2 ON t1.studentCode = t2.personID ) "
s1 = s1 & " lEFT JOIN ( "
s1 = s1 & " SELECT t1.studentCode, "
s1 = s1 & " Sum(t1.ammount) As debtSecondPart "
s1 = s1 & " FROM orders As t1 "
s1 = s1 & " WHERE ((t1.[startDate]) Between #ST# And #TDDEPT#) "
s1 = s1 & " GROUP BY t1.studentCode "
s1 = s1 & " ) AS t3 ON t1.studentCode = t3.studentCode "
s1 = s1 & " WHERE ((debtSecondPart > 0 OR debtSecondPart < 0) "
s1 = s1 & " OR (debtFirstPart > 0 OR debtFirstPart < 0)) "
s1 = Replace(s1, "#ST#", Format(st, "\#mm\/dd\/yy\#"))
s1 = Replace(s1, "#TDDEPT#", Format(tdDept, "\#mm\/dd\/yy\#"))
Debug.Print s1
CurrentDb.QueryDefs("studentsDebtAndPaymentTotal").sql = s1
 
 
s2 = ""
s2 = s2 & " SELECT t1.studentCode, "
s2 = s2 & " t2.debt, "
s2 = s2 & " IIf(IsNull(t3.paymentTotal),0,t3.paymentTotal) AS paymentTotal "
s2 = s2 & " FROM (students AS t1 "
s2 = s2 & " LEFT JOIN studentsDebtFirstPart AS t2 ON t1.studentCode = t2.studentCode) "
s2 = s2 & " LEFT JOIN ( "
s2 = s2 & " SELECT t1.personID, "
s2 = s2 & " sum(t1.total) AS paymentTotal "
s2 = s2 & " FROM payment AS t1 "
s2 = s2 & " WHERE (((t1.personID) Like 'S*') "
s2 = s2 & " AND ((t1.[dateOfPayment]) Between #FD# And #TD#)) "
s2 = s2 & " GROUP BY t1.personID "
s2 = s2 & " ) AS t3 ON t1.studentCode = t3.personID "
s2 = s2 & " WHERE ((t2.debt > 0 OR t2.debt < 0) "
s2 = s2 & " OR (paymentTotal > 0 OR paymentTotal < 0)) "
s2 = s2 & " ORDER BY t1.studentCode; "
s2 = Replace(s2, "#FD#", Format(fd, "\#mm\/dd\/yy\#"))
s2 = Replace(s2, "#TD#", Format(td, "\#mm\/dd\/yy\#"))
Debug.Print s2
CurrentDb.QueryDefs("studentsDebtFirstPart").sql = s2
 
s3 = ""
s3 = s3 & " SELECT (t1.lastName+' ') & (t1.firstName+' ') & t1.patronymicName AS StName, "
s3 = s3 & " t1.studentCode, "
s3 = s3 & " t2.debt, "
s3 = s3 & " t2.paymentTotal, "
s3 = s3 & " IIf(IsNull(t3.orderTotal),0,t3.orderTotal) AS orderTotal, "
s3 = s3 & " (t2.debt + t2.paymentTotal - orderTotal) AS endDebt "
s3 = s3 & " FROM (students AS t1 "
s3 = s3 & " LEFT JOIN studentsDebtAndPaymentTotal AS t2 ON t1.studentCode = t2.studentCode ) "
s3 = s3 & " LEFT JOIN ( "
s3 = s3 & " SELECT t1.studentCode, "
s3 = s3 & " Sum(t1.ammount) As orderTotal "
s3 = s3 & " FROM orders As t1 "
s3 = s3 & " WHERE ((t1.[startDate]) Between #FD# And #TD#) "
s3 = s3 & " GROUP BY t1.studentCode "
s3 = s3 & " ) As t3 ON t1.studentCode = t3.studentCode"
s3 = s3 & " WHERE ((t2.debt > 0 OR t2.debt < 0) "
s3 = s3 & " OR(t2.paymentTotal > 0 OR t2.paymentTotal < 0) "
s3 = s3 & " OR(orderTotal > 0 OR orderTotal < 0)) "
s3 = s3 & " ORDER BY t1.studentCode "
s3 = Replace(s3, "#FD#", Format(fd, "\#mm\/dd\/yy\#"))
s3 = Replace(s3, "#TD#", Format(td, "\#mm\/dd\/yy\#"))
Debug.Print s3
CurrentDb.QueryDefs("studentReport").sql = s3

Вот без кавычек
SQL
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
SELECT t1.studentCode, 
IIf(IsNull(t2.debtFirstPart),0,t2.debtFirstPart) AS debtFirstPart, 
IIf(IsNull(t3.debtSecondPart),0,t3.debtSecondPart) AS debtSecondPart, 
(debtSecondPart - debtFirstPart) AS debt 
FROM (students AS t1 
LEFT JOIN ( 
SELECT t1.personID, 
SUM(t1.total) AS debtFirstPart 
FROM payment AS t1 
WHERE (((t1.personID) LIKE 'S*') 
AND ((t1.[dateOfPayment]) BETWEEN #ST# AND #TDDEPT#)) 
GROUP BY t1.personID 
) AS t2 ON t1.studentCode = t2.personID ) 
LEFT JOIN ( 
SELECT t1.studentCode, 
SUM(t1.ammount) AS debtSecondPart 
FROM orders AS t1 
WHERE ((t1.[startDate]) BETWEEN #ST# AND #TDDEPT#) 
GROUP BY t1.studentCode 
) AS t3 ON t1.studentCode = t3.studentCode 
WHERE ((debtSecondPart > 0 OR debtSecondPart < 0) 
OR (debtFirstPart > 0 OR debtFirstPart < 0)) 
 
 
SELECT t1.studentCode, 
t2.debt, 
IIf(IsNull(t3.paymentTotal),0,t3.paymentTotal) AS paymentTotal 
FROM (students AS t1 
LEFT JOIN studentsDebtFirstPart AS t2 ON t1.studentCode = t2.studentCode) 
LEFT JOIN ( 
SELECT t1.personID, 
SUM(t1.total) AS paymentTotal 
FROM payment AS t1 
WHERE (((t1.personID) LIKE 'S*') 
AND ((t1.[dateOfPayment]) BETWEEN #FD# AND #TD#)) 
GROUP BY t1.personID 
) AS t3 ON t1.studentCode = t3.personID 
WHERE ((t2.debt > 0 OR t2.debt < 0) 
OR (paymentTotal > 0 OR paymentTotal < 0)) 
ORDER BY t1.studentCode; 
 
 
SELECT (t1.lastName+' ') & (t1.firstName+' ') & t1.patronymicName AS StName, 
t1.studentCode, 
t2.debt, 
t2.paymentTotal, 
IIf(IsNull(t3.orderTotal),0,t3.orderTotal) AS orderTotal, 
(t2.debt + t2.paymentTotal - orderTotal) AS endDebt 
FROM (students AS t1 
LEFT JOIN studentsDebtAndPaymentTotal AS t2 ON t1.studentCode = t2.studentCode ) 
LEFT JOIN ( 
SELECT t1.studentCode, 
SUM(t1.ammount) AS orderTotal 
FROM orders AS t1 
WHERE ((t1.[startDate]) BETWEEN #FD# AND #TD#) 
GROUP BY t1.studentCode 
) AS t3 ON t1.studentCode = t3.studentCode
WHERE ((t2.debt > 0 OR t2.debt < 0) 
OR(t2.paymentTotal > 0 OR t2.paymentTotal < 0) 
OR(orderTotal > 0 OR orderTotal < 0))
ORDER BY t1.studentCode
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.05.2018, 22:17
Ответы с готовыми решениями:

Вычисляемое поле из нескольких таблиц
Добрый день! На практике дали курсовую работу: сделать базу данных. Сделал практически всё необходимое, прошу помощи лишь в одном: как...

Ключевое поле для нескольких таблиц
Доброго всем времени суток! Разрабатываю приложение с базой данных в C++builder и столкнулся со следующей проблемой: Есть 3 таблицы,...

Как вывести данные из нескольких таблиц, если в запросе есть поле с NULL?
select Таблица1_ПолеА, Таблица1_ПолеБ, Таблица2_ПолеВ from Таблица1, Таблица2 where Таблица1.ID_ПолеВ=Таблица2.ID_ПолеВЕсли...

4
296 / 257 / 68
Регистрация: 18.06.2015
Сообщений: 570
09.05.2018, 07:16
Я бы порекомендовал не мучаться с динамическим SQL, он в данном случае совершенно не оправдан. Используйте параметры и сохраненные запросы вместо подзапросов. А в таком виде вы замучаетесь его позднее поддерживать, когда понадобится что-то поменять. В конструкторе такие ошибки выявляются сразу.
0
0 / -1 / 0
Регистрация: 15.06.2017
Сообщений: 122
09.05.2018, 09:02  [ТС]
Почему это не оправданно? Я сначала все делаю и проверяю в конструкторе а потом вставляю в код. Я нашел ошибку, не тому запросу давал код.
0
296 / 257 / 68
Регистрация: 18.06.2015
Сообщений: 570
09.05.2018, 10:01
Цитата Сообщение от meref Посмотреть сообщение
Почему это не оправданно?
Проблема в дальнейшей поддержке в первую очередь - слишком сложный запрос для понимания "с листа" и у вас всего 2 параметра, встроенные в запросы параметры прекрасно справятся с задачей, все будет наглядно и легко в поддержке и модификации.
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
09.05.2018, 10:30
По поводу параметров - если параметры задаются в одной форме и используются для многих запросов - то удобнее сделать локальную таблицу параметров и задавать их в этой форме. А в запросах ссылаться на поля таблицы параметров.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2018, 10:30
Помогаю со студенческими работами здесь

Что из перечисленного может относиться к индивидуальным хранилищам электронных данных
Отметьте, что из перечисленного может относиться к индивидуальным хранилищам электронных данных. 1) архивы 4) дискеты 2)...

Объединение нескольких таблиц, содержащих поле с типом данных "Вложение"
Добрый день! Есть две базы данных: контракты за 2013 и контракты за 2014, в которых существуют таблицы с контрактами, содержащие поле с...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru