powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Две строки в одну
12 сообщений из 12, страница 1 из 1
Две строки в одну
    #39751884
Бригадир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пжста какую конструкцию SQL рассматривать для получения из

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

такой вид:

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

?
...
Рейтинг: 0 / 0
Две строки в одну
    #39751885
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
left outer join
...
Рейтинг: 0 / 0
Две строки в одну
    #39751890
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бригадир,

возможны только 0 и 1? Или всё, что хочешь и сколько хочешь?
...
Рейтинг: 0 / 0
Две строки в одну
    #39751892
Бригадир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapБригадир,

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

Пока 0 и 1 ) а вообще может и 2 когда-нибудь
...
Рейтинг: 0 / 0
Две строки в одну
    #39751894
Бригадир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Код: sql
1.
left outer join



а нет ничего "типа Pivot".. из псевдо SQL операторов.. чтобы в одну строку.. какойнить for XML и т.п. я подзабыл немного.
...
Рейтинг: 0 / 0
Две строки в одну
    #39751895
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бригадирaleks222
Код: sql
1.
left outer join




а нет ничего "типа Pivot".. из псевдо SQL операторов.. чтобы в одну строку.. какойнить for XML и т.п. я подзабыл немного.FOR XML PATH('')
...
Рейтинг: 0 / 0
Две строки в одну
    #39751898
Бригадир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто реально в базе просто набор

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

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

Иначе проще в коде С# сформировать одним запросом ))
...
Рейтинг: 0 / 0
Две строки в одну
    #39751899
Бригадир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapБригадирпропущено...


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

о, спасибо.. ща копну..
...
Рейтинг: 0 / 0
Две строки в одну
    #39751900
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
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;
...
Рейтинг: 0 / 0
Две строки в одну
    #39751967
Бригадир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
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
...
Рейтинг: 0 / 0
Две строки в одну
    #39751968
Бригадир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Второй селект классный.. супер.. всего то склейка строки, да?
Это в какой версии появилось - 2012 - ?
...
Рейтинг: 0 / 0
Две строки в одну
    #39751969
Бригадир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 2017.. круто наконец.. спасибо за открытие :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Две строки в одну
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]