2016-10-26 4 views
0

У меня есть следующий перекрестный код запроса для следующей таблицы (VWDRSSTA)Крест Вкладка Запроса с фильтрованным максимальным значением

SYSTEM EREIGNIS DATUM_ZEIT ANTRAGSNUMMER DUNKEL 
    VS POL_AN  1.1.2016  123   1 
    VS ANL_SW  1.2.2016  123   0 
    ZW EIN_ED  1.3.2016  123   0 
    ZW AUS_ED  1.4.2016  222   1 
    VS POL_AN  1.5.2016  222   0 
    VS ANL_SW  1.6.2016  222   0 

Перекрестного код запроса

TRANSFORM Max(VWDRSSTA.DATUM_ZEIT) AS MaxOfDATUM_ZEIT 
SELECT VWDRSSTA.ANTRAGSNUMMER, 
    Max(VWDRSSTA.DUNKEL) AS Dunkel, 
    FROM VWDRSSTA 
INNER JOIN V_NAMES ON (VWDRSSTA.SYSTEM = V_NAMES.SYSTEM_CODE) 
    AND (VWDRSSTA.EREIGNIS = V_NAMES.EREIGNIS) 
GROUP BY VWDRSSTA.ANTRAGSNUMMER 
ORDER BY VWDRSSTA.ANTRAGSNUMMER 
PIVOT V_NAMES.MAPPED_NAME; 

, где V_Names представляет собой таблицу поиска с имена для отображения.

, который дает мне результат

ANTRAGSNUMMER DUNKEL Eingang  Ausgang Schwebe Policierung 
    123   1  1.3.2016     1.2.2016 1.1.2016 
    222   1      1.4.2016 1.6.2016 1.5.2016 

Так как приведенный выше код использует Max(VWDRSSTA.DUNKEL) AS Dunkel я получаю максимум как 1 для обоих Antragsnummer где я хочу значение DUNKEL быть максимум VS в области системы. Технически я хочу второй рекорд с Antragsnummer 222 будет показано, как

222   0      1.4.2016 1.6.2016 1.5.2016 

До сих пор я заменил Max(VWDRSSTA.DUNKEL) AS Dunkel с

DMax("DUNKEL","VWDRSSTA","SYSTEM ='VS'") AS Dunkel 

и

IF(VWDRSSTA.SYSTEM = 'VS', (
      SELECT (Max(VWDRSSTA.DUNKEL)) AS d 
      FROM VWDRSSTA 
      ), NULL) AS Dunkel 

, но оба они не работайте, как ожидалось. Для последнего, который я получил следующее сообщение об ошибке

Многоуровневых предложениях GROUP BY не допускаются в подзапросе

И когда я использую Dmax я получаю только 1 значение, которое является максимальным.

Как достичь вышеуказанного результата?

ответ

0

Самый простой способ - использовать DMAX(), но это может повлиять на производительность на большой таблице.

Рассмотрим этот запрос:

SELECT 
    outer_VWDRSSTA.antragsnummer, 
    DMax("dunkel","VWDRSSTA","[system]='VS' AND antragsnummer =" & [outer_VWDRSSTA].[antragsnummer]) AS mdunkel 
FROM VWDRSSTA AS outer_VWDRSSTA 
GROUP BY outer_VWDRSSTA.antragsnummer; 

Выведет:

+---------------+---------+ 
| antragsnummer | mdunkel | 
+---------------+---------+ 
|   123 |  1 | 
|   222 |  0 | 
+---------------+---------+ 

вы имели:

DMax("DUNKEL","VWDRSSTA","SYSTEM ='VS'") AS Dunkel 

это будет получить максимальную для VS независимо от Antragsnummer она принадлежит. Следовательно, у вас всегда есть 1

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