Member 13114739 Ответов: 1

Как создать отчет регистра посещаемости в SQL


у меня есть таблица nemed table 1,Данные таблицы показаны ниже

attdate inime outtime workedhours empid в
03-01-17 08:30 20:00 12 1
03-02-17 08:30 20:00 12 1
03-03-17 08:30 20:00 12 1
03-04-17 08:30 18:30 10 1
03-06-17 08:30 20:10 12 1
03-05-17 дата воскресенье марта месяца вот почему я не вхожу в эту запись в таблице
у меня есть еще одна таблица таблица 2, Запись показана ниже

empid в leavedate
1 03-10-17
1 03-11-17
мой ожидаемый результат таков, как я хочу, если отработанные часы > 8 означают P ,если сотрудник, присутствующий в таблице 2, означает L в противном случае AB
эмпид 1(03-01-17) 2 3 4 5... 10 11
1 п п п п п л л
1 означает(03-01-17) день 1 марта
2 означает День 2 марта

Что я уже пробовал:

я попробовал, как показано ниже
attdate настоящее время
03-01-14 Р
03-02-17 Р

1 Ответов

Рейтинг:
1

CHill60

Термин, который вы ищете, - это PIVOT - в этой статье есть хороший простой пример Простой способ использования Pivot в SQL-запросе[^]

Вам также нужно будет знать о CASE (Transact-SQL)[^]

Я не собираюсь давать вам полный запрос, потому что считаю это домашним заданием, но я буду очень, очень добр и дам вам пару частей стержня ... потому что вы хотите, чтобы столбцы были днями месяца 1, 2, 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])
и это может быть очень больно печатать. Обратите внимание, что это будет по существу работать для любого месяца - вы просто получите несколько пустых столбцов в конце для февраля, апреля и т. д.

Другой болезненный бит заключается в том, что некоторые из этих столбцов будут содержать нулевые значения. Вы можете справиться с этим на уровне презентации, но если вы хотите справиться с этим на SQL, это также очень болезненно. Вот как это могло бы выглядеть:
ISNULL([1],'-') AS [1],ISNULL([2],'-') AS [2],ISNULL([3],'-') AS [3],ISNULL([4],'-') AS [4],ISNULL([5],'-') AS [5],
ISNULL([6],'-') AS [6],ISNULL([7],'-') AS [7],ISNULL([8],'-') AS [8],ISNULL([9],'-') AS [9],ISNULL([10],'-') AS [10],
ISNULL([11],'-') AS [11],ISNULL([12],'-') AS [12],ISNULL([13],'-') AS [13],ISNULL([14],'-') AS [14],ISNULL([15],'-') AS [15],
ISNULL([16],'-') AS [16],ISNULL([17],'-') AS [17],ISNULL([18],'-') AS [18],ISNULL([19],'-') AS [19],ISNULL([20],'-') AS [20],
ISNULL([21],'-') AS [21],ISNULL([22],'-') AS [22],ISNULL([23],'-') AS [23],ISNULL([24],'-') AS [24],ISNULL([25],'-') AS [25],
ISNULL([26],'-') AS [26],ISNULL([27],'-') AS [27],ISNULL([28],'-') AS [28],ISNULL([29],'-') AS [29],ISNULL([30],'-') AS [30],ISNULL([31],'-')  AS [31]

Однако результаты получаются вроде как ...
Emp 1   2   3   4   5   6
1   P	P   P	P   -	P ... etc