2012-03-06 1 views
1

Мне было предложено создать отчет, сгруппированный по значениям в нескольких столбцах в одной строке из базы данных SQL. НапримерСоздание нескольких строк отчета из одной строки данных

Employee Name | Type1Column1 | Type1Column2 | Type2Column1 | Type2Column2 
John Doe  | 0.00   | 10.00  | 20.00  | 20.00 

Report Output 

Name   | Type  | Total 
John Doe  | Type1  | 10.00 
       | Type2  | 40.00 

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

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

Кто-нибудь знает, как я могу это достичь в SSRS 2008R2?

Заранее благодарен.

+0

Являются ли столбцы всегда фиксированным числом для каждого типа и известны ранее заранее? И.Е. в вашем примере будет ли в наборе данных всегда «Type1Column1», «Type1Column2», «Type2Column1» и «Type2Column2»? Если это так, то вам не нужно будет группировать их, вы можете просто добавить в отчет другую строку данных и суммировать поля в отчете. –

+0

Всегда есть такое же количество столбцов данных (5 x 7), и вы знаете, что они там раньше времени. Я до сих пор не понимаю, что вы имеете в виду? Вы имеете в виду повторение столбца John Doe в каждой строке подробностей (по одному для каждого типа), а затем скрыть те, у которых нет данных? i.e Нулевые суммы для этого типа? –

ответ

3

Можно ли применить оператор UNPIVOT к запросу, возвращающему этот вывод?

select 
EmployeeName, 
case 
    when Type like 'Type1%' 
    then 'Type1' 
    else 'Type2' 
end TypeCol, 
Total 
from (select EmployeeName, Type1Column1, Type1Column2, Type2Column1, Type2Column2 
    from storedprocdata) as f 
unpivot (Total for Type in (Type1Column1, Type1Column2, Type2Column1, Type2Column2) 
) as u 

Обратите внимание, что производная таблица f захватывает данные из таблицы, называемой хранимымиprocdata. Кроме того, оператор case в главном элементе select позволяет группировать столбцы, которые вы явно используете для разных типов.

Затем вы можете выполнить суммарную сумму в столбце Total в отчете SSRS.

+0

Интересная идея; Я слышал об утверждении UnPivot, но никогда не использовал его; Я уверен, что вы можете оценить, что в реальной жизни набор данных намного сложнее, чем мой пример, но я пойду и посмотрю, смогу ли я заставить его работать - спасибо. –

1

Оператор univot должен быть более гибким, но (расширяя комментарий Jamie F на вопрос) это можно было бы сделать, установив 5 строк подробностей (по одному для каждого типа) и установив выражение для столбца Total чтобы быть следующим:

=Fields!Type1Column1.Value+ Fields!Type1Column2.Value+ Fields!Type1Column3.Value+ 
Fields!Type1Column4.Value+ Fields!Type1Column5.Value+ Fields!Type1Column6.Value+ 
Fields!Type1Column7.Value 

- для строки подробностей типа 1, с похожими выражениями для каждой из последующих строк строки типа.

+0

Звучит глупо, но как я могу сделать отчет похожим выше; если я добавлю 5 строк данных, будет небольшой «шаг» между заголовком, то есть Джоном Доу и строками детализации. Наверное, я мог бы повторить имя на каждой строчной строке, а затем скрыть любую строку, которую суммарная сумма добавит к 0. Извините - я печатаю, пока я думаю! –

+0

@JohnKattenhorn: не включайте строку заголовка группы на имя сотрудника - вместо этого поместите имя сотрудника в первую из пяти строк подробностей (и оставьте остальные четыре ячейки строки с деталями для имени столбца пустым). –