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

Откуда:
Сообщений: 4
Добрый день уважаемые форумчане!
Столкнулся с необходимостью рассортировать данные из таблицы по столбцам, с целью логически увязать данные пере дальнейшей работой. Собственно сам пример:
1)Исходная таблица
----------------------------------------------------------------------------------------------------------------------------------
|id |GpsX |GpsY |ActionTime |ActivityId |IsCheckIn|
----------------------------------------------------------------------------------------------------------------------------------
9659A8F0-4858-4E88-B931-03A7F7E20FEF |42.9992973|44.7112604|2018-06-06 11:58:08|8E8EB8E2|0 |
----------------------------------------------------------------------------------------------------------------------------------
B9255187-0DAD-40E3-879C-3DB13761EDF8|42.9992988|44.7112618|2018-06-06 11:56:51|8E8EB8E2|0 |
----------------------------------------------------------------------------------------------------------------------------------
EC2345C1-DAC8-443E-9918-6A62987DFD4A|42.9993128|44.7112685|2018-06-06 11:40:49|8E8EB8E2|1 |
----------------------------------------------------------------------------------------------------------------------------------

2)А вот так должна выглядеть в итоге
-------------------------------------------------------------------------------------------------------------------
|ActivityId|GpsX_IN |GpsY_IN |CheckInTime|CheckOutTime|GpsX_OUT |GpsY_OUT |
-------------------------------------------------------------------------------------------------------------------
8 авг 18, 12:56    [21634250]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из одной таблицы в столбцы другой по условию  [new]
Navil77
Member

Откуда:
Сообщений: 4
Собственно вот так выглядит запрос:

SELECT        t1.ActivityId, t2.GpsX AS GPSX_IN, t2.GpsY AS GPSY_IN, MAX(t2.ActionTime) AS CheckInTime, MAX(t3.ActionTime) AS CheckOutTime, t3.GpsX AS GPSX_OUT, t3.GpsY AS GPSY_OUT
FROM            dbo.CheckInOutResult AS t1 INNER JOIN
                         dbo.CheckInOutResult AS t2 ON t1.ActivityId = t2.ActivityId AND t2.IsCheckIn = 1 INNER JOIN
                         dbo.CheckInOutResult AS t3 ON t2.ActivityId = t3.ActivityId AND t3.IsCheckIn = 0
GROUP BY t1.ActivityId, t2.GpsX, t2.GpsY, t3.GpsX, t3.GpsY


Но в итоге я получаю 2 строки

ActivityIdGpsX_IN GpsY_IN CheckInTimeCheckOutTimeGpsX_OUT GpsY_OUT
8E8EB8E242.999312844.71126852018-06-06 11:40:492018-06-06 11:58:0842.999297344.7112604
8E8EB8E242.999312844.71126852018-06-06 11:40:492018-06-06 11:56:5142.999298844.7112618


а хотелось бы 1 и с учётом самой последней даты

Модератор: Пользуйтесь тегами!


Сообщение было отредактировано: 8 авг 18, 13:33
8 авг 18, 13:03    [21634268]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из одной таблицы в столбцы другой по условию  [new]
invm
Member

Откуда: Москва
Сообщений: 9123
with a as
(
 select ActivityId, ActionTime, GpsX, GpsY, IsCheckIn, row_number() over (partition by ActivityId order by ActionTime desc) as rn from dbo.CheckInOutResult where IsCheckIn = 1
),
b as
(
 select ActivityId, ActionTime, GpsX, GpsY, IsCheckIn, row_number() over (partition by ActivityId order by ActionTime desc) as rn from dbo.CheckInOutResult where IsCheckIn = 0
)
select
 isnull(ci.ActivityId, co.ActivityId),
 ci.ActionTime as CheckInTime,
 ci.GpsX as GpsX_IN,
 ci.GpsY as GpsY_IN,
 co.GpsX as GpsX_OUT,
 co.GpsY as GpsY_OUT,
 co.ActionTime as CheckOutTime
from
 (select ActivityId, ActionTime, GpsX, GpsY, IsCheckIn from a where rn = 1) ci full join
 (select ActivityId, ActionTime, GpsX, GpsY, IsCheckIn from b where rn = 1) co on co.ActivityId = ci.ActivityId;
8 авг 18, 13:52    [21634373]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из одной таблицы в столбцы другой по условию  [new]
Navil77
Member

Откуда:
Сообщений: 4
invm, спасибо!

Не ожидал такую быструю реакцию на этом форуме)))

Сохранил результат запроса в новую таблицу. Вопрос как обновлять там данные?
9 авг 18, 18:28    [21636570]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из одной таблицы в столбцы другой по условию  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Navil77
invm, спасибо!

Не ожидал такую быструю реакцию на этом форуме)))

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


как и в любой другой таблице.
используйте
update dbo.yourtable set colname = value
9 авг 18, 18:42    [21636581]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из одной таблицы в столбцы другой по условию  [new]
Navil77
Member

Откуда:
Сообщений: 4
Владимир Затуливетер,

имеется в виду добавлять новые записи из этого запроса в ранее созданную таблицу.
9 авг 18, 19:15    [21636623]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из одной таблицы в столбцы другой по условию  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30795
Navil77
имеется в виду добавлять новые записи из этого запроса в ранее созданную таблицу.
Записи добавляются командой INSERT
9 авг 18, 20:05    [21636717]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из одной таблицы в столбцы другой по условию  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
https://www.w3schools.com/sql/sql_insert_into_select.asp
9 авг 18, 23:07    [21636915]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить