Кросс-таблица запросов в SQL Server 2000 - PullRequest
3 голосов
/ 06 августа 2010

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

Я хочу произвести нечто похожее на запрос кросс-таблицы в sql-server 2000.

У меня есть структура таблицы, подобная следующей:

Item       Item_Parameter      Parameter
id         item_id             id
desc       parameter_id        desc
           value

Что я хочу сделать, это выровнять данные с помощью запроса / хранимой процедуры, чтобы упростить построение отчетов.

Идеальное решение даст такие результаты, как:

             Parameter.desc[0]      Parameter.desc[1]      Parameter.desc[3]...
item.id[0]   Item_Parameter.value   Item_Parameter.value   Item_Parameter.value
item.id[1]   Item_Parameter.value   Item_Parameter.value   Item_Parameter.value   

Ответы [ 2 ]

5 голосов
/ 06 августа 2010

Если вы уверены, что для каждой комбинации параметра и элемента есть не более одного значения, вы можете использовать простое group by:

select  item_id
,       max(case when parameter_id = 1 then value) Par1
,       max(case when parameter_id = 2 then value) Par2
,       max(case when parameter_id = 3 then value) Par3
from    item_paramenter
group by
        item_id

. Вы можете использовать min или avg вместоmax: это не имеет значения, поскольку для каждого параметра item_id существует только одно значение,

Без динамического SQL невозможно вернуть имена столбцов на основе описания в таблице параметров.

1 голос
/ 06 августа 2010

В итоге я использовал хранимую процедуру (http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables) для динамического создания оператора SQL.

Спасибо, Дэн и Андомар

...