powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Агрегирование + xml path
4 сообщений из 4, страница 1 из 1
Агрегирование + xml path
    #39982356
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть таблица следующего формата (для примера):
ID человека, Марка машины, Цена
IDBrandPrice1Toyota1 000 0002UAZ25 0002Lada550 0003Toyota1 500 0004Ford750 0004Lexus4 200 0004Ford520 0005Honda2 200 000

Одному человеку может принадлежать несколько машин, что очевидно.

Необходимо вывести данную таблицу в следующем виде:
ID человека Все марки машин этого человека через запятую общая стоимость
Причем если у человека, например 2 лады, то во втором столбце так и вывести Lada,Lada, т.е. не уникальные значения, а все.

Для нашей тестовой таблицы выше это будет следующая итоговая таблица (вместо запятой в качестве разделителя использую точку с запятой, а то движок сайта таблицу не построит правильно):

IDBrandAllPriceAll1Toyota1 000 0002UAZ;Lada575 0003Toyota1 500 0004Ford;Lexus;Ford5 470 0005Honda2 200 000

Если вывести ID и сумму у меня получилось запросом ниже, то впихнуть сюда и перечень марок на человеке у меня не получается
То есть я понимаю, что скорее всего xml path тут должен быть вроде, но как его обернуть не допру.
Код: sql
1.
2.
SELECT DISTINCT ID
,SUM(PRICE) OVER (PARTITION BY ID)



Подскажите, как реализовать данный запрос?
...
Рейтинг: 0 / 0
Агрегирование + xml path
    #39982389
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuCosinus
Подскажите, как реализовать данный запрос?
STRING_AGG?
...
Рейтинг: 0 / 0
Агрегирование + xml path
    #39982391
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuCosinus,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare @t table (
id int, 
brand varchar(255),
price float
);

insert into @t values (1, 'Toyota', 1000000), (2, 'UAZ', 25000), (2, 'Lada', 550000), (3, 'Toyota', 1500000), (4, 'Ford', 750000), (4, 'Lexus', 4200000), (4, 'Ford', 520000), (5, 'Honda',2200000);

select
      id,
      sum(price),
      max([brandAll])
from @t t
cross apply (select t2.brand +',' from @t t2 where t2.[id] = t.[id] for xml path('')) T2([brandAll])
group by t.id
...
Рейтинг: 0 / 0
Агрегирование + xml path
    #39983090
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg ,
у меня 2016 сервер, прошу прощения, что не указал

felix_ff ,
Спасибо большое, то что надо. Просто подзапросом :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Агрегирование + xml path
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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