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

Откуда: Москва
Сообщений: 29
Подскажите пжста какую конструкцию SQL рассматривать для получения из

A 1 31
A 0 42
B 1 72
B 0 19

такой вид:

A 1/0 31/42
B 1/0 72/19

?
23 дек 18, 15:36    [21771439]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
aleks222
Member

Откуда:
Сообщений: 850
left outer join
23 дек 18, 15:37    [21771440]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Бригадир,

возможны только 0 и 1? Или всё, что хочешь и сколько хочешь?
23 дек 18, 16:02    [21771453]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
Бригадир
Member

Откуда: Москва
Сообщений: 29
iap
Бригадир,

возможны только 0 и 1? Или всё, что хочешь и сколько хочешь?


Пока 0 и 1 ) а вообще может и 2 когда-нибудь
23 дек 18, 16:14    [21771461]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
Бригадир
Member

Откуда: Москва
Сообщений: 29
aleks222
left outer join


а нет ничего "типа Pivot".. из псевдо SQL операторов.. чтобы в одну строку.. какойнить for XML и т.п. я подзабыл немного.
23 дек 18, 16:23    [21771464]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Бригадир
aleks222
left outer join



а нет ничего "типа Pivot".. из псевдо SQL операторов.. чтобы в одну строку.. какойнить for XML и т.п. я подзабыл немного.
FOR XML PATH('')
23 дек 18, 16:27    [21771465]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
Бригадир
Member

Откуда: Москва
Сообщений: 29
Просто реально в базе просто набор

A 0
A 3
A 0
A 6
B 5
B 2
B 0
B 1
и так далее с С
то есть привести тому виду как я написал в начале.
а если еще учесть что буква это штамп date_time и надо его конвертить сначала в date чтобы уникально сгруппировать по датам..
А потом еще и развернуть в ту форму, которую я запросил в итоге :)

Нагромождения получатся ужасные.. с этими join.. вот я как рыбак и думаю, вдруг есть уже агрегат какойнить построчный, чтобы сразу нанизать данные после первой группировки.

Иначе проще в коде С# сформировать одним запросом ))
23 дек 18, 16:44    [21771470]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
Бригадир
Member

Откуда: Москва
Сообщений: 29
iap
Бригадир
пропущено...


а нет ничего "типа Pivot".. из псевдо SQL операторов.. чтобы в одну строку.. какойнить for XML и т.п. я подзабыл немного.
FOR XML PATH('')


о, спасибо.. ща копну..
23 дек 18, 16:45    [21771471]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
declare @t table (f1 varchar(10), f2 int, f3 int);

insert into @t
values
 ('A', 1, 31),
 ('A', 0, 42),
 ('B', 1, 72),
 ('B', 0, 19),
 ('B', 2, 100);

select
 a.f1,
 replace(b.x.query('data(items/f2)').value('.', 'varchar(max)'), ' ', '/'),
 replace(b.x.query('data(items/f3)').value('.', 'varchar(max)'), ' ', '/')
from
 (select distinct f1 from @t) a cross apply
 (select f2, f3 from @t where f1 = a.f1 order by f2 for xml path('items'), type) b(x);

select
 f1,
 string_agg(f2, '/') within group (order by f2),
 string_agg(f3, '/') within group (order by f2)
from
 @t
group by
 f1;
23 дек 18, 16:51    [21771474]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
Бригадир
Member

Откуда: Москва
Сообщений: 29
invm,

круто, спасибо..

у меня сложнее:

declare @t table (f1 varchar(10), f2 int, f3 int);

insert into @t
values
 ('A', 1, 31),
 ('A', 0, 42),
 ('B', 1, 72),
 ('B', 0, 19),
 ('B', 2, 100);


 SELECT DT.f1 F1,
    SUBSTRING((
	SELECT '/' + CAST(T1.f2 AS VARCHAR)
    FROM @t T1 WHERE T1.f1 = DT.f1
    FOR XML PATH('')), 2, 100) F2,
    SUBSTRING((
	SELECT '/' + CAST(T2.f3 AS VARCHAR)
    FROM @t T2 WHERE T2.f1 = DT.f1
    FOR XML PATH('')), 2, 100) F3
FROM (SELECT DISTINCT f1 FROM @t) DT
23 дек 18, 23:32    [21771644]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
Бригадир
Member

Откуда: Москва
Сообщений: 29
invm,

Второй селект классный.. супер.. всего то склейка строки, да?
Это в какой версии появилось - 2012 - ?
23 дек 18, 23:35    [21771646]     Ответить | Цитировать Сообщить модератору
 Re: Две строки в одну  [new]
Бригадир
Member

Откуда: Москва
Сообщений: 29
в 2017.. круто наконец.. спасибо за открытие :)
23 дек 18, 23:37    [21771647]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить