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

Откуда:
Сообщений: 42
Есть таблица Orders с заказами
Есть таблица OrdersExtra с доп. характеристиками заказов OrdersExtra.OrderID = Orders.ID

требуется вывести такое:

Orders.Id, Orders.Date, ...., (перечисление названий всех OrdersExtra.Name, отнесенных к этому Orders.Id)

как такое сделать, ума не приложу?
19 дек 13, 18:43    [15319637]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
topcyprus
Member

Откуда:
Сообщений: 42
пример вывода

1, 1/1/2013, ..., "Свистелки, сопелки, гуделки"
19 дек 13, 18:45    [15319645]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
_djХомяг
Guest
Вообще то следовало привести скрипт DML таблиц и желаемый резалт
Не это ли надо FAQ
19 дек 13, 18:46    [15319650]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
topcyprus
Member

Откуда:
Сообщений: 42
Таблицы такие

Orders

поля: Orders.Id, Order.Date и проч

OrdersExtra

поля: OrdersExtra.Id, OrdersExtra.OrderID, OrdersExtra.Name

Пример вывода написал
19 дек 13, 18:55    [15319684]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
А для чего вообще такое делать на T-SQL? Как правило хранение чего-то такого через запятую в базе плохо заканчивается.
19 дек 13, 19:04    [15319714]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
topcyprus
Member

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

хранится всё в отдельных записях. Для отчета надо сгенерировать одну из колонок в виде перечисления строк, как я привел пример.
19 дек 13, 19:08    [15319724]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
_djХомяГ
Guest
Вроде пример уже привели
19 дек 13, 19:10    [15319737]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
topcyprus
Member

Откуда:
Сообщений: 42
_djХомяГ,

вы про оператор Cast? я его знаю.

мне надо перечислить в 1 столбце выборки несколько значений из другой таблицы
19 дек 13, 19:13    [15319751]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
_djХомяГ
Guest
нет про решение в FAQ
ЗЫ Даже версия сервера непонятна
19 дек 13, 19:15    [15319762]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
topcyprus
Для отчета надо сгенерировать одну из колонок в виде перечисления строк, как я привел пример.

Отчет каким инструментом делаете, SQL Server Reporting Services? или копи-паст в эксель результата запроса?
19 дек 13, 19:16    [15319765]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
topcyprus
Member

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

нет, свой скрипт на asp.net

Версия сервера 2008
19 дек 13, 19:18    [15319775]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
ну так база отдаст асп.нету табличку, а в нем уже делайте форму отображения как нужно юзеру
19 дек 13, 19:23    [15319795]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
_djХомяГ
Guest
плин вопрос я так понимаю в запросе
а если нет - то в asp.net
19 дек 13, 19:25    [15319805]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
topcyprus
Member

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

да, просто это вместо 1 запроса к базе сделает N+1
неужели нельзя сделать вот такое перечисление? вроде бы простая задача по своей сути, нет?
19 дек 13, 19:25    [15319809]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
_djХомяГ
Guest
прочитатйте напимер про for xml path или FAQ
19 дек 13, 19:29    [15319825]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
transpose
Member

Откуда:
Сообщений: 188
topcyprus
hallabud,

да, просто это вместо 1 запроса к базе сделает N+1
неужели нельзя сделать вот такое перечисление? вроде бы простая задача по своей сути, нет?

group concatenate MSSQL
19 дек 13, 19:29    [15319826]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
Paul Chabinsky
Member

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

Google "t-sql pivot" :-)
19 дек 13, 19:31    [15319834]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
topcyprus
просто это вместо 1 запроса к базе сделает N+1

почему?
19 дек 13, 19:33    [15319842]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
_djХомяГ
Guest
Какого ХУдожника pivot
можно еще про курсор упомянуть
19 дек 13, 19:33    [15319844]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
topcyprus
Member

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

спасибо огромное. по примеру сделал за минуту

stuff(
    (
    select cast(',' as varchar(max)) + U.USERNAME
    from USER_GROUPS U
    WHERE U.GROUP_ID = G.GROUP_ID
    order by U.USERNAME
    for xml path('')
    ), 1, 1, '') AS USERS
19 дек 13, 19:34    [15319848]     Ответить | Цитировать Сообщить модератору
 Re: Внутренний SELECT с перечислением всех наименований  [new]
Paul Chabinsky
Member

Откуда:
Сообщений: 322
_djХомяГ,

Если в разные колонки - PIVOT, если в строку FOR XML.
19 дек 13, 19:51    [15319925]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить