SSRS отображает 2 разные детали

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

пример:

table1
master
master1
master2

table2
master,  hand
master1, hand1
master1, hand2
master2, hand1
master2, hand2

table3
master, foot
master1, foot1
master1, foot2
master2, foot1
master2, foot2

мой запрос sql выглядит следующим образом

select t1.master, t2.hand, t3.foot
from table1 t1 
left outer join table2 t2 on t1.master = t2.master
left outer join table2 t3 on t1.master = t3.master

Я хочу, чтобы вывод отчета ssrs был

master1
hand1
hand2
foot1
foot2

master2
hand1
hand2
foot1
foot2

до сих пор я смог получить

master1
hand1
hand2
master2
hand1
hand2

но как только я пытаюсь добавить еще одну строку для отображения ноги, она ссылается на руку, а не на мастер, поэтому она выглядит так

master1
hand1
foot1
hand1
foot2
hand2
foot1
hand2
foot2

master2
hand1
foot1
hand1
foot2
hand2
foot1
hand2
foot2

если я добавлю еще одну строку вне группы, она покажет только первую строку из таблицы 3.

master1
hand1
hand2
foot1

master2
hand1
hand2
foot1

person user3014803    schedule 20.11.2013    source источник


Ответы (2)


С вашими данными:

введите здесь описание изображения

Начиная с группы master и дочерней группы на основе hand:

введите здесь описание изображения

добавьте соседнюю группу в группу hand, но на этот раз в группу foot:

введите здесь описание изображения

введите здесь описание изображения

Теперь табликс выглядит примерно так:

введите здесь описание изображения

Что дает требуемые результаты:

введите здесь описание изображения

person Ian Preston    schedule 20.11.2013

Лучшая идея - изменить структуру ваших данных. Вместо того, чтобы объединять все три таблицы, сделайте два отдельных запроса (1 для t2 и 1 для t3) и объедините их вместе, тогда вы получите свои данные в строках, и их будет намного проще сгруппировать. Вам нужно будет отсортировать группу сведений по tableName

select t1.id, t2.detail, 't2' tableName from (
select 'master' id union
select 'master1' id union
select 'master2' id) t1
left outer join
(
select 'master' id,  'hand' detail union
select 'master1' id, 'hand1' detail union
select 'master1' id, 'hand2' detail union
select 'master2' id, 'hand1' detail union
select 'master2' id, 'hand2' detail )t2
on t1.id = t2.id

UNION

select t1.id, t3.detail, 't3' tableName from (
select 'master' id union
select 'master1' id union
select 'master2' id) t1
left outer join
(
select 'master' id, 'foot' detail union
select 'master1' id, 'foot1' detail union
select 'master1' id, 'foot2' detail union
select 'master2' id, 'foot1' detail union
select 'master2' id, 'foot2' detail)t3
on t1.id = t3.id

groupingExample2

Результат

Результат группировки

person Sam    schedule 20.11.2013
comment
Первый вариант работает? Основываясь на исходном запросе, естественной иерархии рук и ног не существует, поэтому я думаю, что требуются смежные группы. Какую группировку вы бы предложили? Тем не менее, лучший вариант здесь — действительно изменить запрос, чтобы обеспечить более естественный отчет, как вы описали, так что +1 за это! - person Ian Preston; 21.11.2013
comment
@IanPreston Я думаю, вы правы ... поскольку для руки / ноги есть более одной строки деталей, первый вариант не сработал бы. Однако мой первый вариант состоял в том, чтобы изменить запрос, другая группировка была задним числом, потому что я думал, что пропустил простой трюк. - person Sam; 21.11.2013