Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Слепить две строки в одну  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
spermfall
Guest
ja bi posmotrel v storonu lag() and lead()
13 фев 18, 21:43    [21189192]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
U_rtqwec,

версия сервера у вас какая?
13 фев 18, 22:43    [21189274]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Оно ?
select Operationid, min(Resourceid) as Resourceid1, max(Resourceid) as Resourceid2,  dealtransactid
from ....
group by 
Operationid, dealtransactid
13 фев 18, 22:50    [21189287]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
U_rtqwec
Member

Откуда:
Сообщений: 55
Дедушка
U_rtqwec,

версия сервера у вас какая?


SQL Server 2012
14 фев 18, 08:17    [21189673]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
U_rtqwec
Member

Откуда:
Сообщений: 55
LSV
Оно ?
select Operationid, min(Resourceid) as Resourceid1, max(Resourceid) as Resourceid2,  dealtransactid
from ....
group by 
Operationid, dealtransactid


Спасибо, но не подходит, не факт, что Resourceid1 будет меньше, чем Resourceid2
14 фев 18, 08:18    [21189675]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
U_rtqwec
Member

Откуда:
Сообщений: 55
Kopelly
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, 08:19    [21189678]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Jaffar
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, 11:25    [21190201]     Ответить | Цитировать Сообщить модератору
 Re: Слепить две строки в одну  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
LSV
Jaffar
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, 12:00    [21190340]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить