SQL Server: как min и max очищают другую строку, если они одинаковы, и конвертируют 24 часа в 12 часов без метода where - PullRequest
0 голосов
/ 11 июня 2019

Я хочу объединить EmpID с EmployeeNo и объединить фамилию, имя и отчество из второй таблицы, и я хочу, чтобы записи отделяли O и I от min и max, но если у них нет minили max становится пустым или null Я просто хочу стать пустым для определенной строки, потому что если они не очищают строку, результат будет таким же.

Это 1-й

| Entries               | recordDate              | Empid  | Reference |             
+-----------------------+-------------------------+--------+-----------+  
| 0016930507201907:35I  | 2019-05-07 00:00:00 000 | 001693 |   1693    |  
| 0016930507201917:06O  | 2019-05-07 00:00:00 000 | 001693 |   1693    |  
| 0016930507201907:35I  | 2019-05-08 00:00:00 000 | 001693 |   1693    |  
|                       | 2019-05-08 00:00:00 000 | 001693 |   1693    |

2-йтаблица

| LastName | FirstName | middleName | EmployeeNO |
+----------+-----------+------------+------------+
| Cruz     | Kimberly  | Castillo   |   001693   |

Я хочу объединить эти две таблицы со второй таблицей, объединяя фамилию, имя и отчество.employeeNo присоединиться к Empid, но записи будут разделены между I и O с min или max определенного empId, но если записи не имеют I или O, они будут пустыми, как это, а также где

| Name                    | EmployeeNO | RecordDate              | TimeIn | TimeOut | 
+-------------------------+------------+-------------------------+--------+---------+
| CRUZ, MA  KIMBERLY, CA  |    001693  | 2019-05-07 00:00:00 000 |  07:35 |  05:06  |
| CRUZ, MA  KIMBERLY,CA   |    001693  | 2019-05-08 00:00:00 000 |  07:35 |

Если у меня возникла ошибка, пожалуйста, помогите мне, это ошибка

Ошибка преобразования при преобразовании даты и / или времени из символьной строки.

1 Ответ

0 голосов
/ 11 июня 2019

Следующее сделает это за вас. Я использую пару вложенных CTE. Первый выполняет ваши преобразования данных, второй устанавливает минимальное и максимальное время, а последний запрос устанавливает пустые все строки, в которых отсутствуют записи I.

В данных теста используются переменные таблицы для ваших таблиц Table1 и Table2.

declare @E table(Entries varchar(50), RecordDate varchar(50), EmpID varchar(6), Ref int)
insert @e values ('0016930507201907:35I','2019-05-07 00:00:00 000','001693',1693)  
,('0016930507201917:06O','2019-05-07 00:00:00 000','001693',1693)  
,('0016930507201907:35I','2019-05-08 00:00:00 000','001693',1693)
,('','2019-05-08 00:00:00 000','001693',1693)

declare @B table(LastName varchar(50),FirstName varchar(50),middleName varchar(50),EmployeeNO varchar(6))
insert @B values ('Cruz','Kimberly','Castillo','001693')

;with e as (
select right(Entries,1) as InOut, 
    convert(datetime,left(recorddate,10)) as RecordDate, Entries,
    substring(Entries,15,5) as t,
    EmpID 
from @e
where len(ltrim(Entries))>0
)
, details as (
select B.LastName + ',' + B.FirstName + ',' + B.MiddleName [Name], 
    EmployeeNO,
    RecordDate,
    min(case when InOut='I' then T else '99:99' end) as I,
    max(case when InOut='O' then T else '' end) as O
from @B B
join e on e.EmpID=B.EmployeeNO
group by B.LastName,B.FirstName,B.MiddleName,EmployeeNO,RecordDate
)
select Name, EmployeeNO, RecordDate, case when I='99:99' then '' else I end as TimeIn, O as TimeOut
from details
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...