Как объединить данные в один и тот же идентификатор - PullRequest
0 голосов
/ 10 февраля 2010

У меня есть существующее представление, которое возвращает данные в следующем формате на основе агрегирования имен опций с одинаковым product_id. Имя представления "vProdOptions"

option_name           product_id

XSMALL (2-6)          17854
SMALL (6-10)          17854
MEDIUM (10-14)      17854
LARGE                 18232

Как вернуть эти данные в агрегированном виде, отформатированном так?

  OPTIONS_AVAIL                                           Product_ID

  XSMALL (2-6), SMALL (6-10), MEDIUM (10-14)              127182

  SMALL (6-10), MEDIUM (10-14)                            166382

Я использую MS SQL 2k5.

Я создаю новый вопрос здесь, основываясь на комментариях к этим двум вопросам. Я понял, что вместо этого мне нужен вид.

Агрегирование данных из представления как UDF для использования в операторе выбора

ошибка при создании функции sql

Ответы [ 2 ]

1 голос
/ 10 февраля 2010

Вы можете выбрать отдельные продукты и cross apply их в функции, которая вычисляет строку параметров:

select *
from (select distinct product_id from @t) a
cross apply (
    select option_name + ', ' as [text()]
    from @t b
    where a.product_id = b.product_id
    for xml path('')
) c ( Options )

-->

product_id   Options
17854        XSMALL (2-6), SMALL (6-10), MEDIUM (10-14), 
18232        LARGE, 

Код для создания примера:

declare @t table (option_name varchar(30), product_id int)

insert @t select 'XSMALL (2-6)', 17854
union all select 'SMALL (6-10)', 17854
union all select 'MEDIUM (10-14)', 17854
union all select 'LARGE', 18232
1 голос
/ 10 февраля 2010

Поворот - не очень эффективный способ использования SQL. Лично я бы оставил ваш взгляд в покое и передавал данные через приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...