Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создать сложный запрос на C# / 12 сообщений из 12, страница 1 из 1
28.03.2016, 12:43
    #39201985
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
Добрый день форумчане!
У меня стоит задача создать сложный запрос.
Есть три таблицы в одном базе (table1, table2, table3).

Поля table1:
userid, eventdate, readerid

Поля table2:
userid, firstname, lastname, departmentid

Поля table3:
departmentid, departmentname

Требуется вытащить данные например в Datagridview в таком виде:
firstname, lastname, departmentname, eventdate ("Вход внутрь"), readerid ("Головной офис"), eventdate ("Выход наружу"), readerid ("Пожарный выход 1")

Это система контроля доступа у нас в офисе стоит и требуют отчеты у нас начальство, кто входил, кто выходил за определенный промежуток времени. Вложении есть рисунок примерный вид отчета.
В table1 хранятся все события которые были фиксированные турникетами.
...
Рейтинг: 0 / 0
28.03.2016, 13:42
    #39202052
stomsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
natsad,

А как ты планируешь найти соответствие двум событиям: вход - выход?
Ну например, я вошел через главный вход, выпрыгнул через окно на первом этаже в туалете, затем зашел через тот же главный вход, а вечером вышел через пожарный выход.
Т.е., с точки зрения СКД, я вошел два раза подряд, а вышел только после второго входа.
Как должна выглядеть таблица?
...
Рейтинг: 0 / 0
28.03.2016, 14:00
    #39202078
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
Таблица должна быть как на рисунке. Если например вышел только после второго входа, то соответственно ячейка первого выхода должна быть пустым или 0. Здесь еще будет сортировка по двум колонкам "ORDER BY userid, eventdate ASC".
Например:

Имя | Фамилия | Отдел | Вход | Ридерайди | Выход | Ридерайди |
Иван Иванов ТБ 08:30 Головной офис 00:00 -------
Иван Иванов ТБ 10:15 Головной офис 12:30 Пожарный выход1

и т.д.
Ну вот так типа должна выглядеть.
Есть ли у кого-нибудь идеи.
Я не могу распределить в одной строке вход-выход.
...
Рейтинг: 0 / 0
28.03.2016, 18:27
    #39202450
Belavik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
Я нефига не понял, но внимательнее бы смотрел за Даминовой Суфьей. Два раза вышла через что-то (турникет не определен), но при этом не входила. Проблема то в чем? Сформировать запрос?
...
Рейтинг: 0 / 0
28.03.2016, 18:30
    #39202454
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
natsad,

А где хранятся времена входа и выхода?
Почему точки входа-выхода не в отдельной таблице?
...
Рейтинг: 0 / 0
28.03.2016, 18:37
    #39202457
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
Так,
Сотрудник входит или выходит через турникеты используя свои карточки магнитные. В случае Даминовой, она не входила по карточке (просто охраник открыл дверь через кнопку), но выходила по карточке.

Времена входов и выходов копятся в таблице table1:
Времена это - колонка eventdate
Турникеты это - колонка readerid.
А в колонку readerid попадают integer значения:
1) входы - 1,3,7,9,12
2) выходы - 2,4,8,10,11


Вот так бы хотел получить таблицу:
Например человек вошел 8 утра, но вышел не по турникету, затем вошел в 10:15, затем вышел в 12:30.
----Имя----|----Фамилия----|----Отдел----|----Вход----|----Ридерайди----|----Выход----|----Ридерайди----|
---Иван----|----Иванов-----|---- ТБ -------|---08:30---|---Головной офис-|---00:00------|------------------|
---Иван----|----Иванов-----|-----ТБ-------|---10:15----|--Головной офис--|---12:30------|--Пожарный выход1---|
...
Рейтинг: 0 / 0
28.03.2016, 20:22
    #39202528
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
natsadВ случае Даминовой, она не входила по карточке (просто охраник открыл дверь через кнопку), но выходила по карточке
выговор сделать охраннику в данном случае.

В остальном классическим select тут не решается. Надо писать код либо на клиенте, либо на сервере. Суть кода: сортируешь выборку по (юзер, время) перебираешь последовательно с учетом вход/выход и строишь таблицу.
...
Рейтинг: 0 / 0
29.03.2016, 06:14
    #39202663
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
Цель-то какая всего этого? Просто вывести вот такую вот таблицу или найти все нарушения (два входа/выхода подряд)?
...
Рейтинг: 0 / 0
29.03.2016, 09:58
    #39202782
mishanya3624
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
natsad,

так в чем проблема, все просто, sql в зубы и вперед , join вам в помощь, все связи между таблицами есть.
...
Рейтинг: 0 / 0
29.03.2016, 10:09
    #39202810
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
16768527

Или вообще всю тему почитайте
...
Рейтинг: 0 / 0
29.03.2016, 18:06
    #39203510
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
Ребята всем спасибо большое за советы. У меня получилось решить задачу эту. Хорошие советы дал пользователь javajdbc в другой теме. Отдельное спасибо Arm79 и Dima T.
...
Рейтинг: 0 / 0
02.04.2016, 09:01
    #39206531
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать сложный запрос на C#
natsad,

Эх. Вы бы еще и моего совета послушались бы
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создать сложный запрос на C# / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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