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

Откуда:
Сообщений: 5
Добрый день коллеги, помогите пожалуйста, с SQL только начинаю общаться. Сильно не ругайте.
Прошу помощи вот в чем, есть такой запрос

SELECT EPEventClass.OwnerRecordID, EPCustomer.BeginningNumber, EPCustomer.EndNumber, EventClass.EventClassName
FROM EPCustomer INNER JOIN
EPEventClass ON EPCustomer.OwnerRecordID = EPEventClass.OwnerRecordID INNER JOIN
EventClass ON EPEventClass.EventClassID = EventClass.EventClassID

Возвращает таблицу такого вида
OwnerRecordID BeginningNumber EndNumber EventClassName
6 1027 1027 Снят
6 1027 1027 Неис
6 1027 1027 Пост
8 1044 1044 Снят
8 1044 1044 Неис
8 1044 1044 Пост
9 16513 16513 Снят
9 16513 16513 Пост

Как в запросе можно сгруппировать чтобы получился ответ вида
______________________________________________________________
OwnerRecordID |BeginningNumber | EndNumber | EventClassName
6 | 1027 | 1027 | Снят,Неис,Пост
8 | 1044 | 1044 | Снят,Неис,Пост
9 | 16513 | 16513 | Снят,Пост

Т.е. одинаковые строки убрать из столбцов OwnerRecordID BeginningNumber EndNumber, а в столбце EventClassName все объединить.
3 фев 14, 06:02    [15508177]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк в запросе.  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Frost14,

Сложение символьных полей в запросе
3 фев 14, 06:37    [15508188]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк в запросе.  [new]
Frost14
Member

Откуда:
Сообщений: 5
С двумя столбцами еще могу справиться а вот с 4-мя не могу осилить=(
3 фев 14, 06:39    [15508190]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк в запросе.  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Frost14,

Покажите, как делаете и что именно не получается.

Через FOR XML PATH(), я надеюсь?
3 фев 14, 07:05    [15508199]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк в запросе.  [new]
Frost14
Member

Откуда:
Сообщений: 5
Вот так пытаюсь завести=(

select [dbo.EPEventClass.OwnerRecordID] ,

(select [dbo.EventClass.EventClassName]+': '+cast([dbo.EPCustomer.BeginningNumber] as nvarchar)+ ',' as 'data()'
from dbo.EPCustomer, dbo.EPEventClass, dbo.EventClass
where t1.[dbo.EPEventClass ON EPCustomer.OwnerRecordID]=t2.[dbo.EPEventClass.OwnerRecordID] for xml path('') )

from dbo.EPCustomer t1

group by [dbo.EPEventClass.OwnerRecordID]
3 фев 14, 12:14    [15509355]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк в запросе.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Frost14
Вот так пытаюсь завести=(

И зачем вы изменили пример из FAQ, добавив еще одну таблицу в подзапрос ?
И что мешает добавить еще поля ?
3 фев 14, 12:16    [15509375]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк в запросе.  [new]
Frost14
Member

Откуда:
Сообщений: 5
Так мне надо 3 таблицы использовать

SELECT dbo.EPCustomer.OwnerRecordID, dbo.EPCustomer.EndNumber,
dbo.EPCustomer.BeginningNumber, dbo.EventClass.EventClassName

FROM dbo.EPCustomer, dbo.EPEventClass, dbo.EventClass

WHERE dbo.EPCustomer.OwnerRecordID = dbo.EPEventClass.OwnerRecordID AND
dbo.EPEventClass.EventClassID = dbo.EventClass.EventClassID

Но ответ от такого запроса

6 1027 1027 Снят
6 1027 1027 Неис
6 1027 1027 Пост
8 1044 1044 Снят
8 1044 1044 Неис
8 1044 1044 Пост
9 16513 16513 Снят
9 16513 16513 Пост

А надо

6 1027 1027 Снят,Неис,Пост
8 1044 1044 Снят,Неис,Пост
9 16513 16513 Снят,Пост

Вот я и не могу сообразить куда какие строки вставлять.
3 фев 14, 12:42    [15509568]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк в запросе.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Frost14
Так мне надо 3 таблицы использовать

Вопрос был - почему 3 таблицы в подзапросе. А не почему вообще 3 таблицы

select dbo.EPEventClass.OwnerRecordID ,

(select dbo.EventClass.EventClassName+': '+cast(dbo.EPCustomer.BeginningNumber as nvarchar)+ ',' as 'data()' 
from  dbo.EPEventClass, dbo.EventClass 
where 	dbo.EPCustomer.OwnerRecordID = dbo.EPEventClass.OwnerRecordID AND
dbo.EPEventClass.EventClassID = dbo.EventClass.EventClassID for xml path('') )

from dbo.EPCustomer
3 фев 14, 13:19    [15509858]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк в запросе.  [new]
Frost14
Member

Откуда:
Сообщений: 5
SELECT OwnerRecordID, EndNumber,
BeginningNumber, EventClassName, (

select cast([EventClassID] as nvarchar)+ ',' as 'data()'
from EPEventClass t2,EPCustomer t4, EPCustomer t6
where t1.OwnerRecordID=t2.OwnerRecordID
AND t3.EndNumber=t4.EndNumber
AND t3.BeginningNumber=t6.BeginningNumber
for xml path('') )

FROM dbo.EPEventClass t1, dbo.EPCustomer t3, dbo.EventClass

group by OwnerRecordID,EndNumber,BeginningNumber

Ошибка

Сообщение 209, уровень 16, состояние 1, строка 13
Ambiguous column name 'OwnerRecordID'.
Сообщение 209, уровень 16, состояние 1, строка 1
Ambiguous column name 'OwnerRecordID'.
4 фев 14, 06:24    [15513858]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк в запросе.  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Frost14,

расставьте алиасы у полей в GROUP BY

Бросайте писать запятые во FROMе!
Это что, по-Вашему?
По-моему, это ничем не ограниченный CROSS JOIN трёх таблиц.
За такое у нас выводили во двор и расстреливали.
4 фев 14, 08:46    [15514000]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить