Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
U_rtqwec Member Откуда: Сообщений: 55 |
Есть вот такие две строки OperationID CharType Resourceid dealtransactid --------------------------------------- -------- --------------------------------------- --------------------------------------- 10000000002 1 10000000003 10000000013 10000000002 2 10000000000 10000000013 Нужно сделать одну вот такого вида OperationID Resourceid1 Resourceid2 dealtransactid --------------- --------------------- --------------------- ---------------------------- 10000000002 10000000003 10000000000 10000000013 То есть, Resourceid с CharType 1 должен стать Resourceid1, а Resourceid с CharType 2 должен стать Resourceid2. Не могу сообразить никак, что тут лучше сделать. |
13 фев 18, 21:37 [21189181] Ответить | Цитировать Сообщить модератору |
spermfall
Guest |
ja bi posmotrel v storonu lag() and lead() |
13 фев 18, 21:43 [21189192] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
U_rtqwec, версия сервера у вас какая? |
13 фев 18, 22:43 [21189274] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
Оно ?select Operationid, min(Resourceid) as Resourceid1, max(Resourceid) as Resourceid2, dealtransactid from .... group by Operationid, dealtransactid |
13 фев 18, 22:50 [21189287] Ответить | Цитировать Сообщить модератору |
Kopelly Member Откуда: Красноярск Сообщений: 289 |
LSV,Declare @tmp table ( OperationID bigint, CharType int, Resourceid bigint, dealtransactid bigint ); Insert into @tmp Values (10000000002, 1, 10000000003, 10000000013), (10000000002, 2, 10000000000, 10000000013), (10000000002, 1, 10000000002, 10000000014), (10000000002, 2, 10000000005, 10000000014); Select OperationID, [1] as Resourceid1 , [2] as Resourceid2, dealtransactid From @tmp PIVOT (Max(Resourceid) For CharType in ([1],[2])) as p |
14 фев 18, 06:09 [21189571] Ответить | Цитировать Сообщить модератору |
U_rtqwec Member Откуда: Сообщений: 55 |
SQL Server 2012 |
||
14 фев 18, 08:17 [21189673] Ответить | Цитировать Сообщить модератору |
U_rtqwec Member Откуда: Сообщений: 55 |
Спасибо, но не подходит, не факт, что Resourceid1 будет меньше, чем Resourceid2 |
||
14 фев 18, 08:18 [21189675] Ответить | Цитировать Сообщить модератору |
U_rtqwec Member Откуда: Сообщений: 55 |
Спасибо, этот вариант хорош, надо потестировать, единственно не понятно как оно отработает на нескольких миллионах строк. |
||
14 фев 18, 08:19 [21189678] Ответить | Цитировать Сообщить модератору |
Jaffar Member Откуда: Сообщений: 633 |
U_rtqwec,--- Можно так select OperationID, dealtransactid, max(case CharType when 1 then Resourceid end) Resourceid_1, max(case CharType when 2 then Resourceid end) Resourceid_2, from TABLE_TABLE group by OperationID, dealtransactid |
14 фев 18, 08:39 [21189700] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
|
||
14 фев 18, 11:25 [21190201] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
|
||||
14 фев 18, 12:00 [21190340] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |