Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли получить данные в следующем формате средствами SQL?  [new]
Начинающий SQL
Guest
Здравствуйте.
У нас есть 3 таблицы Managers (ID, Name), Sales (ID,ManagerID,GoodID) и Goods (ID,GoodName)
т.е. мы можем получить таблицу вида
ManagerGoodName
ИвановТовар1
ПетровТовар5
ИвановТовар3
ИвановТовар2
ПетровТовар2

Можно ли средствами SQL получить табличку в следующем виде:
Managerвсе проданные им товары через запятую
ИвановТовар1Товар3Товар2
ПетровТовар5Товар2

Если да, будьте добры, приведите пример кода.
9 дек 13, 00:10    [15262004]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли получить данные в следующем формате средствами SQL?  [new]
Начинающий SQL
Guest
Или не через запятую :)
Managerвсе проданные им товары через знак плюс
ИвановТовар1+Товар3+Товар2
ПетровТовар5+Товар2

так таблица не разваливается
9 дек 13, 00:14    [15262015]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли получить данные в следующем формате средствами SQL?  [new]
pio777
Member

Откуда:
Сообщений: 127
Начинающий SQL,

FAQ
9 дек 13, 01:06    [15262133]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли получить данные в следующем формате средствами SQL?  [new]
Начинающий SQL
Guest
pio777

Спасибо!


Теперь следующая проблема:
Если добавили поле Date в Sales (ID,ManagerID,GoodID,Date) и нам нужно получить список всех продавцов продавших товар в определенный промежуток времени. Я пишу следующее:
SELECT
	ManagerID,Name, (select cast(GoodName as nvarchar) + '+' from Sales t2,Goods where t1.ManagerID=t2.ManagerID AND t2.GoodID=Goods.ID AND t2.Date>'20130101' AND t2.Date<'20130301' for xml path('')) СписокТоваров
FROM
	Sales t1, Managers
WHERE
        t1.ManagerID=Managers.ID
GROUP BY ManagerID,Name
ORDER BY ManagerID ASC

Получаю следующее:
ManagerIDNameСписокТоваров
1СидоровNULL
4ПупкинNULL
5ПоповNULL
7ИвановТовар1+Товар3+Товар2+
9dgdsfgsdNULL
10ПетровТовар5+Товар2+

И хоть убей не понимаю как избавиться от лишних значений.
9 дек 13, 08:35    [15262431]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли получить данные в следующем формате средствами SQL?  [new]
Условие отбора
Guest
Добавить условие отбора, очевидно.

SELECT
ManagerID, Name,
(
select cast(GoodName as nvarchar) + '+'
from Sales t2
inner join Goods
on t1.ManagerID=t2.ManagerID
AND t2.GoodID=Goods.ID
AND t2.Date>'20130101' AND t2.Date<'20130301' for xml path('')
) СписокТоваров
FROM
Sales t1
inner join Managers
on t1.ManagerID=Managers.ID
AND t1.Date>'20130101' AND t1.Date<'20130301'
GROUP BY ManagerID,Name
ORDER BY ManagerID ASC
9 дек 13, 09:08    [15262489]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли получить данные в следующем формате средствами SQL?  [new]
Условие отбора
Guest
SELECT
   ManagerID, Name, 
   (
      select cast(GoodName as nvarchar) + '+' 
      from Sales t2 
      inner join Goods 
         on t1.ManagerID=t2.ManagerID 
         AND t2.GoodID=Goods.ID 
         AND t2.Date>'20130101' AND t2.Date<'20130301' for xml path('')
   ) СписокТоваров
FROM
   Sales t1
   inner join Managers 
      on t1.ManagerID=Managers.ID
      AND t1.Date>'20130101' AND t1.Date<'20130301' 
GROUP BY ManagerID,Name
ORDER BY ManagerID ASC

оформление.
9 дек 13, 09:09    [15262495]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли получить данные в следующем формате средствами SQL?  [new]
Начинающий SQL
Guest
мда... Вчера пробовал, не сработало. Видимо надо на свежую голову работать. Спасибо!
9 дек 13, 09:14    [15262510]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли получить данные в следующем формате средствами SQL?  [new]
Начинающий SQL
Guest
Ну и до полноты картины, как получить запись Товар1+Товар3+Товар2
Сейчас получаю такую Товар1+Товар3+Товар2+
9 дек 13, 23:49    [15267928]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли получить данные в следующем формате средствами SQL?  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
а я верю!
верю, что однажды люди изобретут функции для работы со строками.
м.б. не я, но внуки мои увидят
10 дек 13, 00:48    [15268037]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить