powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложная Выборка данных из ряда разных таблиц для отчета
10 сообщений из 10, страница 1 из 1
Сложная Выборка данных из ряда разных таблиц для отчета
    #39635822
Alex Pancho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть список сторудников
У каждого сотрудника могут быть публикации, монографии, патенты и руководство.
За каждый элемент начисляются баллы.
соственно, надо собрать из базы сумму балов (это вышло) и вывести отчет по сотруднику, где указаны все его публикации, монографии, патенты и руководство
Тут такой завтык, что я никак не могу решить это без дублирования данных и появления пустых строк.
Моц лутший вариант:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT Сотрудники.[№], Сотрудники.Фамилия, Сотрудники.Инициалы, Сотрудники.[Лаборатория №], должности.Коэффициент_должности, ql3.pub_ball, Q4.mono_ball, q5.pat_ball, q6.rukv_ball, Лаборатории.[Лаборатория №] AS LabNo, Лаборатории.[Заведующий лабораторией] AS LabShef, Q_itog.Itogo_bal
FROM (Лаборатории RIGHT JOIN (((((Сотрудники RIGHT JOIN должности ON Сотрудники.Должность = должности.Должность) LEFT JOIN (SELECT Список_научных_публикаций.Журнал AS Mag, Список_научных_публикаций.год & ", " & Список_научных_публикаций.Том_volume & ", " &
 IIf((Список_научных_публикаций.Выпуск_Issue<>0),"(" & Список_научных_публикаций.Выпуск_Issue & ") "," ") & Список_научных_публикаций.[Начальная страница] & "-" & Список_научных_публикаций.[Конечная страница] AS AllAboutPub, Список_научных_публикаций.Балл AS pub_ball, Список_авторов.Автор FROM Список_научных_публикаций 
INNER JOIN Список_авторов ON Список_научных_публикаций.Код = Список_авторов.Научная_публикация WHERE (Список_научных_публикаций.Дата_появления_в_базе_данных Between ItDateEnd() And ItDateStart()))  AS ql3 ON Сотрудники.[№] = ql3.Автор) LEFT JOIN (SELECT Monograf_spisok.AutorId, Monograf.Nazvanie & ", (" & Monograf.KolvoStran & ") " & Format(Monograf.DataPub,"yyyy") AS all_mon, Monograf.ball AS mono_ball FROM Monograf INNER JOIN Monograf_spisok ON Monograf.ID = Monograf_spisok.MonoId WHERE 
(Monograf.DataPub Between ItDateEnd() And ItDateStart()))  AS Q4 ON Сотрудники.[№] = Q4.AutorId) LEFT JOIN (SELECT Patent_spisok.AutorId, Patent.Nomer AS all_pat, Patent.Ball AS pat_ball FROM Patent INNER JOIN Patent_spisok ON Patent.ID = Patent_spisok.PatentId 
WHERE (Patent.DataPubl Between ItDateEnd() And ItDateStart()))  AS q5 ON Сотрудники.[№] = q5.AutorId) LEFT JOIN (SELECT Rukovod.RukovId, Rukovod.Nazvanie & ", " & Rukovod.Autor & ", " & Rukovod_ql.Level AS all_ruk, Rukovod.ball AS rukv_ball FROM Rukovod_ql INNER JOIN Rukovod ON Rukovod_ql.ID = Rukovod.QualLevel WHERE (Rukovod.DataZashit Between ItDateEnd() And ItDateStart()))  AS q6 ON Сотрудники.[№] = q6.RukovId) ON Лаборатории.[Лаборатория №] = Сотрудники.[Лаборатория №]) LEFT JOIN Q_itog ON Сотрудники.[№] = Q_itog.[№]
ORDER BY Сотрудники.[№];


буду благодарен за помощь с написанием запроса
...
Рейтинг: 0 / 0
Сложная Выборка данных из ряда разных таблиц для отчета
    #39635823
Alex Pancho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самому только что пришел в голову такой вариант: выбирать только ид элементов и их тим, а затем делать Dlookup подстаовку данных, счас попробую
...
Рейтинг: 0 / 0
Сложная Выборка данных из ряда разных таблиц для отчета
    #39635847
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отдельно в запросах считаешь баллы за конкретный вид продукции (используя таблицу сотрудников и таблицу конкретного вида продукции). Все полученные подзапросы привязываешь к ещё одной копии таблицы сотрудников и считаешь общую сумму.
Потом, если припрёт, можешь всё это собрать в один запрос... но не советую.
...
Рейтинг: 0 / 0
Сложная Выборка данных из ряда разных таблиц для отчета
    #39635891
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex PanchoУ каждого сотрудника могут быть публикации, монографии, патенты и руководство.


посмотрела схему таблиц --весьма не понравилась
как и типы данных

например автор в разных таблицах
--числовой
--текстовый
--количество авторов+авторы в одной из таблиц
--полный список авторов (мемо) -примерно в 4-5 таблицах

----
остальные поля особо не смотрела, но сложно при таком разнобое что-то получить, не прилаживая подпорки
...
Рейтинг: 0 / 0
Сложная Выборка данных из ряда разных таблиц для отчета
    #39636285
Alex Pancho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всё поля с ИД автора имеют числовой тип. Мемо нужно для других целей и не участвует, так что с этой точки зрениявсё ок.
...
Рейтинг: 0 / 0
Сложная Выборка данных из ряда разных таблиц для отчета
    #39636995
Alex Pancho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, короче UNION решает, главое свести число столбцов к общему знаменателю

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SELECT Список_авторов.Автор AS aid, Журналы.[Краткое название] AS pub, 
Список_научных_публикаций.год & ", " & Список_научных_публикаций.Том_volume & ", " & IIf((Список_научных_публикаций.Выпуск_Issue<>0),"(" & Список_научных_публикаций.Выпуск_Issue & ") "," ") 
& Список_научных_публикаций.[Начальная страница] & "-" & Список_научных_публикаций.[Конечная страница] AS AllAboutPub, Список_научных_публикаций.Балл*должности.Коэффициент_должности AS pub_ball
FROM (Сотрудники INNER JOIN (Журналы INNER JOIN (Список_научных_публикаций INNER JOIN Список_авторов ON Список_научных_публикаций.Код = Список_авторов.Научная_публикация) 
ON Журналы.Код = Список_научных_публикаций.Журнал) 
ON Сотрудники.[№] = Список_авторов.Автор) 
INNER JOIN должности ON Сотрудники.Должность = должности.Должность
UNION all 
SELECT Monograf_spisok.AutorId as aid, Monograf.Nazvanie AS m_pub, 
Monograf.KolvoStran & " c, " & Format(Monograf.DataPub, "yyyy")& "; " & iif(Monograf.Virgin=true, "Впрв" ,"Прб" ) AS m_det, 
Monograf.ball AS m_ball
FROM Monograf 
INNER JOIN Monograf_spisok ON Monograf.ID = Monograf_spisok.MonoId
UNION all 
SELECT Patent_spisok.AutorId as aid, Patent.Nazvanie AS p_pub, 
Patent.Nomer & ", " &  Format(Patent.DataPubl, "yyyy") as P_det, Patent.Ball as p_ball
FROM Patent 
INNER JOIN Patent_spisok ON Patent.ID = Patent_spisok.PatentId
UNION ALL 
SELECT Rukovod.RukovId as aid, Rukovod.Nazvanie as r_mag, 
Rukovod_ql.Level & ", " & Format(Rukovod.DataZashit, "yyyy") as r_det, Rukovod.ball as r_ball
FROM Rukovod_ql 
INNER JOIN Rukovod ON Rukovod_ql.ID = Rukovod.QualLevel;



...
Рейтинг: 0 / 0
Сложная Выборка данных из ряда разных таблиц для отчета
    #39637099
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex PanchoUNION решаетНеверно. Создай сотрудника, у которого нет ничего, и убедись, что он не попадает в итоговую выборку.
...
Рейтинг: 0 / 0
Сложная Выборка данных из ряда разных таблиц для отчета
    #39637102
Alex Pancho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
раз ничего нет - он туда и не должен попадать, выборка только для тех кто есть.
...
Рейтинг: 0 / 0
Сложная Выборка данных из ряда разных таблиц для отчета
    #39637113
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходное
Alex PanchoУ каждого сотрудника могут быть публикации, монографии, патенты и руководство.
...
надо ... вывести отчет по сотруднику
не очень согласуется с последним
Alex Panchoраз ничего нет - он туда и не должен попадать, выборка только для тех кто есть.
...
Рейтинг: 0 / 0
Сложная Выборка данных из ряда разных таблиц для отчета
    #39637193
Alex Pancho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
могут быть, а могут не быть. Если есть хоть что-то - попадет, если нет ничего - не попадет, хотя можно написать запрос так, чтобы даже с налл попадали, так что не вижу проблем.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложная Выборка данных из ряда разных таблиц для отчета
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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