Запрос "Итоги": показать последнюю непустую строку - PullRequest
0 голосов
/ 23 декабря 2010

У меня есть запрос итогов (тот, на котором я нажал кнопку итогов, и у него есть столбцы «сгруппировать по») в Access 2007. Большинство столбцов в порядке ... группируются по столбцам, максимальным столбцам, минимальным столбцам и т. Д.Однако для некоторых из них я хочу извлечь только последнее непустое (не "" или нулевое) значение строкового столбца.

Вот пример того, как выглядит мой SQL:

SELECT  Min(Duplicates.AttendedODBefore) AS AttendedODBefore,
        Min(Duplicates.ContactByPost) As ContactByPost,
        Last(Duplicates.PlannedStart) As PlannedStart,
        Min(Duplicates.AccessibilityRequirements) AS AccessibilityRequirements,
        Last(Duplicates.UcasNumber) As UcasNumber
--      ^^^^
FROM    DuplicateStudents As Duplicates
GROUP BY
        Duplicates.ID

Выделенное выражение - это то, которое я хочу изменить на последнее непустое поле.Существует ли специфичное для Access или простое выражение SQL, которое будет делать это?

Edit: Оказывается, что Min() и Max() работают со строковыми значениями и игнорируют нулевые значения, принимаяпервое и последнее значения в алфавитном порядке.Это не идеально, потому что это не гарантирует, что выбранное значение является последним, но это лучше, чем просто загрузка нулей, что может дать использование Last().

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

На основании вашего комментария кажется, что вы определили "Последнее" следующим образом: самая последняя добавленная запись, основанная на автоматически увеличивающемся идентификаторе . Таким образом, должна работать некоторая форма следующего (она использует подзапрос, чтобы вернуть самый последний ненулевой UcasNumber):

SELECT  Min(Duplicates.AttendedODBefore) AS AttendedODBefore,
        Min(Duplicates.ContactByPost) As ContactByPost,
        Last(Duplicates.PlannedStart) As PlannedStart,
        Min(Duplicates.AccessibilityRequirements) AS AccessibilityRequirements,
        (SELECT TOP 1 D.UcasNumber FROM Duplicates AS D
         WHERE D.UcasNumber Is Not Null
         ORDER BY D.ID DESC) As UcasNumber
FROM    DuplicateStudents As Duplicates
0 голосов
/ 06 апреля 2011

Доступ кажется устойчивым к идее возврата последнего ненулевого значения в запросе с использованием GROUP BY.Даже если ваше предложение FROM было изменено так, чтобы оно было похоже на

FROM    (
    SELECT allfieldsyouneed 
    FROM DuplicateStudents 
    ORDER BY PlannedStart
) AS SortedDuplicates

, а остальная часть вашего запроса была изменена для использования вместо него SortedDuplicates, похоже, Access не возвращает последнее значение на основе указанного вами порядка.Я проверил на таблице ровно одну пустую строку и конкретные ордера, которые я мог проверить (как поле с автоматическим приращением, так и значение, которое я проверил, используя Min и Max), и Access решил вернуть другое значение как Last.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...