Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос по SQL запросу  [new]
rust1983
Member

Откуда:
Сообщений: 6
USE worktime
DECLARE @from datetime
DECLARE @to datetime
DECLARE @CheckNumber datetime
SELECT @from='2016-06-22 00:00:01.000',@to='2016-06-22 23:59:59.000',@CheckNumber=215
SELECT distinct
p.[Name],
me.EventTime ,
me.CheckNumber ,
me.TabelNumber ,
case when cc.isOut=0 THEN 'Вход' ELSE 'Выход'END,
cp.NameCheckPoint,
is1.[Description]
FROM _MoveEvent me WITH (NOLOCK)
INNER JOIN _Person p WITH (NOLOCK) ON p.TabelNumber=me.TabelNumber
INNER JOIN _Regulation r WITH (NOLOCK) ON r.UIDStaff=p.UIDStaff and r.StartDate<=@from
INNER JOIN _CheckPointContent cc WITH (NOLOCK) ON me.CheckNumber=cc.NumberCheck
INNER JOIN _CheckPoint cp WITH (NOLOCK) ON cc.IDCheckPoint=cp.ID
INNER JOIN _GroupPointContent gpc WITH (NOLOCK) ON gpc.NameCheckPoint=cp.NameCheckPoint
INNER JOIN _InterbaseSource is1 WITH (NOLOCK) ON cp.IDInterbaseSource=is1.ID AND me.IDInterbaseSource=is1.id
WHERE
me.EventTime BETWEEN @from AND @to
--AND me.CheckNumber in (9, 18, 19, 20, 31, 42, 53, 64, 75, 79, 86, 92, 97, 105, 118, 131, 144, 164, 177, 270, 278, 281, 289, 313, 314, 324, 331, 342, 360, 371, 412, 423, 440, 465, 468, 476, 633, 644, 681, 692, 703, 816, 827, 1059, 1070, 1332, 1438, 1449, 1489, 1500, 1636, 1647, 1677, 1688, 1795, 1806, 1817, 1828, 1839, 1850, 1861, 1973, 1988, 1999, 2066, 2077, 2087, 2091, 2098, 2102, 2119, 2130, 2141, 2152, 2234, 2289, 2300, 2355, 2366, 2471, 2482, 2498, 2773, 2784, 3028, 3039, 3076, 3087, 3190, 3201, 3375, 3397, 3664, 3675, 3827, 4148, 4159, 4253, 4264, 4276, 4287, 4298, 4309, 4320, 4331, 4342, 4353, 4364, 4375, 4386, 4397, 4408, 4419, 4420, 4430, 4431, 4441, 4452, 4463, 4474, 4485, 4496, 4507, 4518, 4529, 4562, 4573, 4584, 4595, 4606, 4617, 4628, 4639, 4672, 4694, 4716, 4727, 4738, 4749, 4705, 4683, 4782, 4793, 5676, 5687, 5698, 5709, 5720, 5731, 5742, 5753, 7859, 7826, 7837, 9785, 9796, 10317, 10328, 10374, 10385, 10894, 10905, 12507, 12518, 13024, 13035, 13046, 13057)
--AND me.CheckNumber in (5817)
--AND p.[Path] LIKE '\ВВ\%'
and me.TabelNumber in (1020576)


Такой вопрос как сделать так чтобы Вход был в одной колонке а Выход в другой
Такой еще вопрос как сделать чтобы в списке был только первый вход и последний выход сотрудника за день, а не все его движения за целый день

К сообщению приложен файл. Размер - 130Kb
27 июн 16, 13:22    [19339831]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SQL запросу  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5123
rust1983
Такой вопрос как сделать так чтобы Вход был в одной колонке а Выход в другой

select
...
from
[Входы] t1 (<join type>) join [Выходы] t2 on t1.<id человека> = t2.<id человека>

rust1983
Такой еще вопрос как сделать чтобы в списке был только первый вход и последний выход сотрудника за день, а не все его движения за целый день

select top 1 with ties
...
from
[Входы]
order by
row_number() over(partition by <id человека>, <Дата_Входа> order by <Дата_Время_Входа>)

select top 1 with ties
...
from
[Выходы]
order by
row_number() over(partition by <id человека>, <Дата_Выхода> order by <Дата_Время_Входа> desc)
27 июн 16, 14:34    [19340252]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SQL запросу  [new]
rust1983
Member

Откуда:
Сообщений: 6
Дедушка,
А как это в моей скрипте применить, я как то не очень понимаю :(
27 июн 16, 14:37    [19340263]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SQL запросу  [new]
i-i
Guest
1. sozdaem dataset so vhodami

select top 1 with ties <columns> from <tables>
order by row_number() over(partition by me.TabelNumber, CONVERT(varchar(20), EventTime, 112) order by EventTime)
where cc.isOut=0


2. analogichno sozdaem vihodi
select top 1 with ties <columns> from <tables>
order by row_number() over(partition by me.TabelNumber, CONVERT(varchar(20), EventTime, 112) order by EventTime desc)
where cc.isOut!=0


3. soedinaem dataseti
select
...
from
[Входы] t1 (<join type>) join [Выходы] t2 on t1.TabelNumber = t2.TabelNumber and CONVERT(varchar(20), t1.EventTime, 112) = CONVERT(varchar(20), t2.EventTime, 112)


zapros ne prooptimizirovan i bidet medlenno rabotat na bolshom ob'eme dannih
27 июн 16, 18:18    [19341569]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить