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

Откуда:
Сообщений: 906
Здравствуйте.
Есть таблица:

dt user work
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


Нужно получить такой набор данных:
user data
Иванов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


Пробовал с FOR XML PATH, но она склеивает всю таблицу в одну строку.
16 фев 21, 11:53    [22281494]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
L_argo
Member

Откуда:
Сообщений: 1386
Написать sql-ф-цию с такой конструкцией:

@result = @result + ',' + MyField...

ее можно будет применять во многих местах.
16 фев 21, 12:32    [22281527]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
MAULER
Member

Откуда:
Сообщений: 906
L_argo
Написать sql-ф-цию с такой конструкцией:

@result = @result + ',' + MyField...

ее можно будет применять во многих местах.


Спасибо.
16 фев 21, 12:51    [22281545]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
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 Ответить