@alexandrsemen4ukk

Как вывести первое и последнее значение за день в горизонтальный отчёт?

База данных на проходной. Каждый день туда пишутся события. Как сделать отчёт в Microsoft Report Builder, в который выводить ФИО сотрудника, первый вход и последний выход за день на протяжении месяца.
например
6323136b76081997379703.jpeg

Как сформировать такой запрос?
  • Вопрос задан
  • 365 просмотров
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
SELECT [ФИО], 1 AS Line,
       [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]
  FROM 
    ( SELECT [ФИО], 
             DAY([Событие]) AS [День],
             FORMAT([Событие], 'HH:mm') AS [Время]
        FROM [Проходная]
        WHERE FORMAT([Событие], 'yyyy-MM') = @P) AS enDay
    PIVOT ( MIN([Время])
      FOR [День] IN ( [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])
        ) AS enPivot
UNION
SELECT [ФИО], 2,
       [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]
  FROM 
    ( SELECT [ФИО], 
             DAY([Событие]) AS [День],
             FORMAT([Событие], 'HH:mm') AS [Время]
        FROM [Проходная]
        WHERE FORMAT([Событие], 'yyyy-MM') = @P) AS enDay
    PIVOT ( MAX([Время])
      FOR [День] IN ( [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])
          ) AS enPivot
UNION
SELECT [ФИО], 3,
       [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]
  FROM 
    ( SELECT [ФИО],
             DAY([Событие]) AS [День],
             FORMAT(MAX([Событие]) - MIN([Событие]), 'HH:mm') AS [Время]
        FROM [Проходная]
        WHERE FORMAT([Событие], 'yyyy-MM') = @P
        GROUP BY [ФИО], DAY([Событие])) AS enDay
    PIVOT ( MAX([Время])
      FOR [День] IN ( [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])
           ) AS enPivot
  ORDER BY 1, 2

Список для параметра:
SELECT DISTINCT FORMAT([Событие], 'yyyy-MM')
  FROM [Проходная]
  ORDER BY 1 DESC

Значение по-умолчанию для параметра:
SELECT FORMAT(MAX([Событие]), 'yyyy-MM')
  FROM [Проходная]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
phoinixrw
@phoinixrw
Архитектор информационных систем
SELECT
    fio,
    date,
    MIN(reg_time) AS come_time,
    MAX(reg_time) AS out_time
FROM logtable
GROUP BY fio, date;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы