powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Из таблицы 1:n записей получить таблицу 1:1 записей
10 сообщений из 10, страница 1 из 1
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098191
Диана Орел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица параметров. для каждого процесса PROCESS_ID свой набор параметров: их может быть 1,2,3... Соответвенно, для каждого параметра своя запись в таблице T_PROCESS_PARAMS.
process_id param_id paramname paramvalue111 1 param1 val1111 2 param2 val2112 3 param3 val3113 4 param4 val4113 5 param5 val5113 6 param6 val6

Есть запрос
Код: sql
1.
2.
3.
DECLARE @DIM_PARAMS NVARCHAR(MAX) = '' 
select @dim_params = @dim_params+paramname+'='+paramvalue+'; ' from T_PROCESS_PARAMETERS  where PROCESS_ID = 111
select  @dim_params as 'param_list'


запрос возвращает список параметров в строку для выбранного процесса
param1=val1, param2=val2,

Мне надо получить такой результат:
process_id param_list111 param1=val1; param2=val2;112 param3=val3;113 param4=val4; param5=val5; param6=val6;...

как это сделать?
...
Рейтинг: 0 / 0
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098193
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Диана Орел,

STRING_AGG
...
Рейтинг: 0 / 0
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098217
Диана Орел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL
Диана Орел,

STRING_AGG


не поддерживается, MSSQL 2015. Но направление поняла. Спасибо
...
Рейтинг: 0 / 0
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098218
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дианане поддерживается, MSSQL 2015. Но направление поняла. Спасибо

тут смотрите ФАК
Сложение символьных полей в запросе
Сложение символьных полей в запросе для SQL Server 2005
...
Рейтинг: 0 / 0
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098223
Диана Орел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решила так: написала функцию

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create OR ALTER function dbo.GET_PROC_PARAMS 
(@PROC_ID INT)
returns nvarchar(max)
as
begin
DECLARE @DIM_PARAMS NVARCHAR(MAX) = ''
select @dim_params = @dim_params+paramname+'='+paramvalue+', ' from dbo.T_PROCESS_PARAMETERS  where PROCESS_ID = @PROC_ID
return case when @dim_params='' then 'N/A' else @dim_params end
end

go

select PROCESS_ID, dbo.GET_PROC_PARAMS(PROCESS_ID) PARAMS_LIST from dbo.T_PROCESSES
...
Рейтинг: 0 / 0
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098265
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана Орел
решила так: написала функцию

Скалярная UDF - плохой вариант. Табличная инлайновая с for xml будет намного лучше.
...
Рейтинг: 0 / 0
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098275
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Диана Орел,

зачем ф-ии плодить?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @t table (process_id int, param_id int, paramname varchar(20), paramvalue varchar(20))
insert @t values (111,1,'param1','val1'),
                 (111,2,'param2','val2'),
		 (112,3,'param3','val3'),
		 (113,4,'param4','val4'),
		 (113,5,'param5','val5'),
		 (113,6,'param6','val6')

select process_id, 
       param_list = (select paramname + ' = ' + paramvalue + ';' from @t b where a.process_id = b.process_id for xml path('')) 
 from (select distinct process_id from @t) a
 
...
Рейтинг: 0 / 0
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098343
Диана Орел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL, Сон Веры Павловны, спасибо за опыт. Буду изучать
...
Рейтинг: 0 / 0
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098380
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана Орел,

учтите, что при наличии в строковых полях спец. символов такой способ вместо этих симоволов отобразит их xml entities:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @t table (process_id int, param_id int, paramname varchar(20), paramvalue varchar(20))
insert @t values (111,1,'<param1>','&val1&'),
                 (111,2,'param2','val2'),
                 (112,3,'param3','val3'),
                 (113,4,'param4','val4'),
                 (113,5,'param5','val5'),
                 (113,6,'param6','val6')

select process_id, 
       param_list = (select paramname + ' = ' + paramvalue + ';' from @t b where a.process_id = b.process_id for xml path('')) 
 from (select distinct process_id from @t) a


process_idparam_list111& lt;param1& gt; = &аmp;val1&аmp;;param2 = val2;112param3 = val3;113param4 = val4;param5 = val5;param6 = val6;
Чтобы этого избежать, нужно в подзапросе (функции) получать типизированный xml, и у него получать текстовое содержимое:
Код: sql
1.
2.
3.
select process_id, 
       param_list = (select paramname + ' = ' + paramvalue + ';' from @t b where a.process_id = b.process_id for xml path(''), type).value('.', 'nvarchar(max)')
 from (select distinct process_id from @t) a
...
Рейтинг: 0 / 0
Из таблицы 1:n записей получить таблицу 1:1 записей
    #40098596
Диана Орел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны, Спасибо :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Из таблицы 1:n записей получить таблицу 1:1 записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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