Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подскажите, пожалуйста, решение / 23 сообщений из 23, страница 1 из 1
07.04.2018, 16:09
    #39627141
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
Добрый день!

Во вложении СКРИН результат выполнения запроса
Код: vbnet
1.
2.
3.
SELECT t_client.fio, t_filial.id_filial, z_learning_tabel.date_learning, z_learning_tabel.course_learning, z_learning_tabel.status_tabel
FROM ((z_learning_tabel LEFT JOIN t_client ON z_learning_tabel.client_learning = t_client.id_client) LEFT JOIN t_filial ON z_learning_tabel.filial_learning = t_filial.id_filial) LEFT JOIN t_course ON z_learning_tabel.course_learning = t_course.id_course
GROUP BY t_client.fio, t_filial.id_filial, z_learning_tabel.date_learning, z_learning_tabel.course_learning, z_learning_tabel.status_tabel;



Когда человек посещает два занятия в день: одно со статусом Н, другое с О.
Как написать запрос чтобы в итоге группировки по клиенту access выдал статус "Н/О", как результат объединения двух строк?
...
Рейтинг: 0 / 0
08.04.2018, 01:28
    #39627221
zimkon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
quickstar,
на маленьком примерчике (общий принцип)
...
Рейтинг: 0 / 0
08.04.2018, 01:29
    #39627222
zimkon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
quickstar,
...
Рейтинг: 0 / 0
08.04.2018, 05:41
    #39627232
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
zimkon, класс!!!

Перенес на свой код
Код: vbnet
1.
2.
3.
4.
SELECT [%$##@_Alias].fio, [%$##@_Alias].id_filial, [%$##@_Alias].date_learning, [%$##@_Alias].course_learning, fff(fio) AS status_tabel
FROM (SELECT z_tabel_lev_1_1.fio, z_tabel_lev_1_1.id_filial, z_tabel_lev_1_1.date_learning, z_tabel_lev_1_1.course_learning
FROM z_tabel_lev_1_1
GROUP BY z_tabel_lev_1_1.fio, z_tabel_lev_1_1.id_filial, z_tabel_lev_1_1.date_learning, z_tabel_lev_1_1.course_learning) AS [%$##@_Alias];



Группирует, единственное не разобрался в том, что записывает значение по всем найденным данным, а нужно чтобы записывало только если один ученик, в одну дату, у одного препода и на одном уроке был дважды за день.

Как группировать статус в таком случае?
...
Рейтинг: 0 / 0
08.04.2018, 05:54
    #39627233
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
я так понимаю проставляет статус по ФИО, так как в функции написано брать ФИО.
А как сделать, чтобы еще группировал по дата, курсу, занятию?
Видимо, это как-то нужно в функции прописать.


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Function fff(f As String) As String
Dim s As String
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("select status_tabel from z_tabel_lev_1_1 where fio='" & f & "'")
s = ""
rst.MoveFirst
Do While Not rst.EOF
...
Рейтинг: 0 / 0
08.04.2018, 06:07
    #39627235
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
zimkon, во вложении Ваш пример, в который я добавил курс.
сейчас статус проставляет по ФИО, а как сделать так, чтобы учитывало курс?

т.е. статус проставлялся с учетом курса (группировка по курсу).
...
Рейтинг: 0 / 0
08.04.2018, 08:03
    #39627240
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
quickstarодин ученик, в одну дату, у одного препода и на одном уроке был дважды за деньЭто как? Это почти как в писании... почти. Триедин.
...
Рейтинг: 0 / 0
08.04.2018, 08:04
    #39627241
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
quickstar, попробуй как промежуточный запрос использовать перекрёстный запрос.
...
Рейтинг: 0 / 0
08.04.2018, 08:28
    #39627244
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
Панург, не понимаю зачем промежуточный запрос.
Все что нужно, это статус группировать не только по фио, по фио и курсу.
...
Рейтинг: 0 / 0
08.04.2018, 09:06
    #39627248
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
quickstar, потому как я не люблю все эти доморощенные функции группировки - очень уж они тормозные. А сгруппировать получится и в перекрёстном.
...
Рейтинг: 0 / 0
08.04.2018, 09:07
    #39627249
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
Дополнил...
Панургquickstar, потому как я не люблю все эти доморощенные функции группировки и канкатенации - очень уж они тормозные. А сгруппировать получится и в перекрёстном.
...
Рейтинг: 0 / 0
08.04.2018, 10:19
    #39627259
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
Панург, перекрестным сделал через first и last, далее через выражение их объединил.
Но эта конструкция не работает когда одно занятие. В этом случае first и last принимают одно значение...
...
Рейтинг: 0 / 0
08.04.2018, 10:39
    #39627261
zimkon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
quickstarzimkon, во вложении Ваш пример, в который я добавил курс.
сейчас статус проставляет по ФИО, а как сделать так, чтобы учитывало курс?

т.е. статус проставлялся с учетом курса (группировка по курсу).
см. пример
...
Рейтинг: 0 / 0
08.04.2018, 11:00
    #39627264
zimkon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
zimkonquickstarzimkon, во вложении Ваш пример, в который я добавил курс.
сейчас статус проставляет по ФИО, а как сделать так, чтобы учитывало курс?

т.е. статус проставлялся с учетом курса (группировка по курсу).
см. пример
возможно, не правильно понял - тогда такой вариант
...
Рейтинг: 0 / 0
08.04.2018, 11:07
    #39627266
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
Панург, дошел во до чего.
Остался вопрос только в том, что count не считает количество
Код: vbnet
1.
2.
3.
4.
5.
TRANSFORM Count(z_tabel_lev_1_1.status_tabel) AS [Count-status_tabel]
SELECT z_tabel_lev_1_1.fio, z_tabel_lev_1_1.id_filial, z_tabel_lev_1_1.date_learning, z_tabel_lev_1_1.course_learning
FROM z_tabel_lev_1_1
GROUP BY z_tabel_lev_1_1.fio, z_tabel_lev_1_1.id_filial, z_tabel_lev_1_1.date_learning, z_tabel_lev_1_1.course_learning
PIVOT z_tabel_lev_1_1.status_tabel;
...
Рейтинг: 0 / 0
08.04.2018, 11:08
    #39627267
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
zimkon, да! это то, что нужно.
Благодарю!!!

Теперь осталось для расширения кругозора еще научиться через перекрестный запрос так делать.
...
Рейтинг: 0 / 0
08.04.2018, 11:48
    #39627272
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
zimkon, все ли я правильно в синтаксисе расставил? Не считает у меня.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Function fff(f As String, f1, f2, f3) As String
Dim s As String
Dim rst As DAO.Recordset
If IsNull(f1) Or Trim(f1) Or IsNull(f2) Or Trim(f2) Or IsNull(f3) Or Trim(f3) = "" Then
    Set rst = CurrentDb.OpenRecordset("select status_tabel from z_tabel_lev_1_1 where fio='" & f & "' group by status_tabel")
Else
    Set rst = CurrentDb.OpenRecordset("select status_tabel from z_tabel_lev_1_1 where fio='" & f & "' and id_filial='" & f1 & "' and date_learning='" & f2 & "' and course_learning='" & f3 & "' group by status_tabel")
End If
s = ""
rst.MoveFirst
Do While Not rst.EOF
    s = s & "/" & rst.Fields(0)
    rst.MoveNext
Loop
fff = Right(s, Len(s) - 1)
rst.Close
Set rst = Nothing
End Function
...
Рейтинг: 0 / 0
08.04.2018, 12:25
    #39627278
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
А так?
...
Рейтинг: 0 / 0
08.04.2018, 14:00
    #39627285
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
sdku, да, хорошее решение для одной вариации.
Дело в том, что может быть комбинация их четырех значений: 1, Б, П, О.
В этом случае, нужно смочь вариант от zimkon под себя настроить или как Панург предлагал через перекрестный запрос.
Вот только на count в перекрестном запросе я споткнулся. Не считает.
...
Рейтинг: 0 / 0
08.04.2018, 14:30
    #39627286
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
[quot quickstar]может быть комбинация их четырех значений: 1, Б, П, О.
В этом случае, нужно смочь вариант от zimkon под себя настроить или как Панург предлагал че/quot]

iif допускает,точно не помню,кажись 7 вложений, а count до 32 (упаси господи от такого) условий с AND и(или) OR путем комбинаций можно задать хоть черта лысого:
ст:
Код: vbnet
1.
IIf(DCount("дата";"t";"дата=#" & Format([дата];"mm/dd/yy") & "# and условие1 and условие2")>1;"Н\О";DCount("дата";"t";"дата=#" & Format([дата];"mm/dd/yy") & "# and условие1 and условиеt2")>1;"какойНадоСтатус";статус))

и далее в таком духе-но лучше пользовательскую функцию
...
Рейтинг: 0 / 0
08.04.2018, 14:41
    #39627287
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
sdku, zimkon, Панург, спасибо Вам за помощь!

В итоге все получилось благодаря комбинации решений.
Шаг 1: запросом посчитал количество статусов.
Шаг 2: на основании запроса в шаге 1 сформировал перекрестный запрос.
Шаг 3: через формулу iif построил нужную комбинацию статусов.

Усё ррработает! Ай эм хэппи)
...
Рейтинг: 0 / 0
10.04.2018, 09:51
    #39627776
Подскажите, пожалуйста, решение
quickstarнужно чтобы записывало только если один ученик, в одну дату, у одного препода и на одном уроке был дважды за день.

Как группировать статус в таком случае? Ну, если боль"трижды" и больше не бывает, то
по "status_tabel" не группировать, а написать выражение вида (в режиме конструктора):
Код: sql
1.
status_tabel: IIF(Min(status_tabel)<>Max(status_tabel);Min(status_tabel) & "/" & Max(status_tabel);Min(status_tabel))
...
Рейтинг: 0 / 0
10.04.2018, 11:49
    #39627840
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, пожалуйста, решение
quickstar,

фиокурстабельныйстатусИванов300001Петровм20000GПетровм20000ОПетровм20000НПетровм20000ОПетровм20000НПетровп20000GСидоров400002

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT W.фио, W.табельный, W.курс,
 Max(ZH) & Max(ZO) & Max(ZG) & Max(Z1) & Max(Z2) AS Выражение1
FROM (SELECT t.[фио], t.[табельный],t.[курс],
iif( t.[статус]="Н","Н","") AS ZH,
iif( t.[статус]="O","O","") AS ZO,
iif( t.[статус]="G","G","") AS ZG,
iif( t.[статус]="1","1","") AS Z1,
iif( t.[статус]="2","2","") AS Z2
FROM t)  AS W
GROUP BY W.фио, W.табельный, W.курс;



фиотабельныйкурсВыражение1Иванов300001Петров20000мНGПетров20000пGСидоров400002
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подскажите, пожалуйста, решение / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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