Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
MAULER Member Откуда: Сообщений: 906 |
Здравствуйте. Есть таблица:
Нужно получить такой набор данных:
Пробовал с FOR XML PATH, но она склеивает всю таблицу в одну строку. |
||||||||||||||||||||||||||||||||||||||||
16 фев 21, 11:53 [22281494] Ответить | Цитировать Сообщить модератору |
MAULER Member Откуда: Сообщений: 906 |
Сделал так:select [user], [data] = (select cast (dt as nvarchar(10)) + ':' + cast (work as nvarchar (5)) + '; ' from wh w where w.[user] = h.[user] FOR XML PATH('')) from wh h group by [user] order by user Но что-то мне подсказывает, что можно по другому. |
16 фев 21, 12:07 [22281506] Ответить | Цитировать Сообщить модератору |
L_argo Member Откуда: Сообщений: 1386 |
Написать sql-ф-цию с такой конструкцией: @result = @result + ',' + MyField... ее можно будет применять во многих местах. |
16 фев 21, 12:32 [22281527] Ответить | Цитировать Сообщить модератору |
MAULER Member Откуда: Сообщений: 906 |
Спасибо. |
||||
16 фев 21, 12:51 [22281545] Ответить | Цитировать Сообщить модератору |
Sybex Member Откуда: Moscow Сообщений: 117 |
А если SQL Server от 2017 и выше, то можно так:DECLARE @T TABLE([dt] date, [user] nvarchar(100), [work] float) INSERT @T VALUES ('2021-02-01', 'Иванов', 0.24) ,('2021-02-02', 'Иванов', 1.66) ,('2021-02-03', 'Иванов', 4.32) ,('2021-02-04', 'Иванов', 0.41) ,('2021-02-01', 'Петров', 6.2) ,('2021-02-02', 'Петров', 8.66) ,('2021-02-06', 'Сидоров', 1.2) ,('2021-02-07', 'Сидоров', 0.66) ,('2021-02-09', 'Сидоров', 2.54) SELECT [user] ,STRING_AGG(CONCAT([dt], N':', [work]), N';') AS [data] FROM @T GROUP BY [user] |
16 фев 21, 15:43 [22281681] Ответить | Цитировать Сообщить модератору |
uaggster Member Откуда: Сообщений: 950 |
DECLARE @T TABLE([dt] date, [user] nvarchar(100), [work] float) INSERT @T VALUES ('2021-02-01', 'Иванов', 0.24) ,('2021-02-02', 'Иванов', 1.66) ,('2021-02-03', 'Иванов', 4.32) ,('2021-02-04', 'Иванов', 0.41) ,('2021-02-01', 'Петров', 6.2) ,('2021-02-02', 'Петров', 8.66) ,('2021-02-06', 'Сидоров', 1.2) ,('2021-02-07', 'Сидоров', 0.66) ,('2021-02-09', 'Сидоров', 2.54) Select distinct [user], t.* from @T a Cross apply (select cast (dt as nvarchar(10)) + ':' + cast (work as nvarchar (5)) + '; ' from @T b where a.[user] = b.[user] Order by dt FOR XML PATH('')) t([data]) |
17 фев 21, 08:05 [22282038] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |