2013-06-18 3 views
1

Моя схема выглядит немного как это:Сортировка сгруппированный отчет

SEQ GROUP1 GROUP2 GROUP3 VALUE 

Где SEQ примерно соответствует номеру строки - это на самом деле порядок сортировки из внешней таблицы - и GROUPx поля очертить данные далее. Так, например:

SEQ GROUP1 GROUP2 GROUP3 VALUE 
---- ------- ------- ------- ------ 
1 A  A  A  123 
2 A  A  A  456 
3 A  B  C  foo 
5 X  Y  Z  bar 
4 A  B  D  baz 

Я хотел бы эти данные, сгруппированные в этой иерархии, но по заказу SEQ. Таким образом, приведенные выше данные будут производить такой отчет:

A 
    A 
    A 
     123 
     456 
    B 
    C 
     foo 
    D 
     baz 
X 
    Y 
    Z 
     bar 

Я играл с «группировки и сортировки» варианты доклада и я, кажется, чтобы быть в состоянии иметь его заказали, но не сгруппированы, или сгруппированные но не заказано!

Например, если указать:

  • Группа по GROUP1
    • Группа по GROUP2
      • группы по GROUP3
        • Сортировать по SEQ

Значения в полях уровня группировки определяют порядок, в котором данные выходит. (В этом случае имена я выбрал в алфавитном порядке в любом случае, но если бы я изменил название X в GROUP1 к 123, казалось бы, прямо в верхней части отчета.)

Если я двигаю «Сортировать по SEQ» с наивысшим приоритетом, порядок верен, но уровни группировки нарушены: доступ в основном обрабатывает поле SEQ как уровень группировки, а затем последующая иерархия повторяется для каждого значения в этой группе.

Есть ли способ достичь того, что я ищу, не имея поля SEQx для каждого поля GROUPx (а не моего текущего «глобального» SEQ)?

ответ

0

Я думаю, вам нужно будет левым присоединиться к этому. Сначала создайте запрос, используя только SEQ, и закажите его по SEQ. Затем возьмите свой групповой запрос и Left Присоедините его к первому запросу, чтобы он сохранял правильный порядок. Имеют смысл? Код

ваш запрос должен более или менее быть:

SELECT 
First(B.SEQ) AS FirstOfSEQ, tblTest.Group1, tblTest.Group2, tblTest.Group3, tblTest.Val AS Val2 FROM (SELECT tblTest.SEQ FROM tblTest ORDER BY tblTest.SEQ) AS B 
LEFT JOIN tblTest ON B.SEQ = tblTest.SEQ 
GROUP BY tblTest.Group1, tblTest.Group2, tblTest.Group3, tblTest.Val 
ORDER BY First(B.SEQ); 

В макете отчета, порядок его SEQ, то группа его другими значениями, и вы должны получить то, что вам нужно.

+0

Н.Б., "Группе" в отчете Access не то же самое, как SQL 'GROUP BY'. Это плохой выбор слов со стороны Microsoft; возможно, «Упорядочить по» или «Голова» будет лучше ... – Xophmeister

+0

... Я считаю, что ваше решение не имеет значения. Тем не менее, это ценно, так что спасибо :) – Xophmeister

+0

Это абсолютно работало для меня: SELECT First (B.SEQ) AS FirstOfSEQ, tblTest.Group1, tblTest.Group2, tblTest.Group3, tblTest.Val AS Val2 FROM (SELECT tblTest.SEQ ОТ tblTest ORDER BY tblTest.SEQ) КАК Б LEFT JOIN tblTest ПО B.SEQ = tblTest.SEQ GROUP BY tblTest.Group1, tblTest.Group2, tblTest.Group3, tblTest.Val ORDER BY First (B.SEQ); В макете отчета закажите его по SEQ, затем сгруппируйте его по другим значениям и получите то, что вам нужно. –

-1

Я решил это на моем собственном

Select TimeOffRequestID, ВашеИмя AS "Имя сотрудника", Replace (forwardcallsto 'Select One', 'Голосовая почта') AS "переадресовывать вызовы на", назначение AS "Комментарии" ОТ ПСЭ.nei_TimeOffRequest ГДЕ CAST (CONVERT (VARCHAR, GetDate(), 101) AS DATETIME) МЕЖДУ startingon И endingon ORDER BY ВашеИмя ASC

Смежные вопросы