MS Access SQL дубликаты строк? - PullRequest
2 голосов
/ 23 июня 2009

Запрос:

SELECT DISTINCT ([Equipment List].ID) AS Expr1, [Job Assignments].Job
FROM [Equipment List] LEFT JOIN [Job Assignments] 
    ON [Equipment List].ID = [Job Assignments].EquipmentID;

В этом запросе идентификатор оборудования отличается, если и только если я не добавлю [Job Assignments] .Job в операторе select. Как только я это сделаю, я получу много дубликатов. Таблица назначений заданий имеет много заданий, но меня интересует только одно с пустым [Дата возврата] или пустым. Есть идеи, как это сделать? Я использую это как отчет, поэтому он выдает ошибку, когда я пытаюсь использовать внутренние SQL-запросы. Также это упрощенный запрос, так как оригинал имеет несколько вариантов выбора. Что я делаю неправильно? Любая помощь будет принята с благодарностью.

Обновление: я хочу выбрать только одну строку из таблицы [Job Assignments]. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 23 июня 2009

DISTINCT возвращает различные комбинации всех столбцов в операторе SELECT, поэтому введение второго столбца также вводит дуплексы.

Похоже, что вы можете уйти с предложением WHERE:

SELECT DISTINCT ([Equipment List].ID) AS Expr1, [Job Assignments].Job 
FROM [Equipment List] 
LEFT JOIN [Job Assignments] ON [Equipment List].ID = [Job Assignments].EquipmentID
WHERE [Job Assignments].[Date Returned] IS NULL

У вас не может быть «пустой» даты, поэтому, если вы видите пробелы, скорее всего, вы не используете тип datetime для хранения своей даты - в этом случае вам нужно будет сказать:

WHERE COALESCE([Job Assignments].[Date Returned], '') = ''

Редактировать: последнее решение на основе комментариев ниже:

;WITH LatestJobs
AS
(SELECT     ja.EquipmentID, ja.Job,
            ROW_NUMBER() OVER ( PARTITION BY EquipmentID 
                                ORDER BY [Date Returned] DESC) AS RowNumber
FROM        [Job Assignments] AS ja)

SELECT      el.ID AS EquipmentID, 
            lj.Job
FROM        [Equipment List] AS el
LEFT JOIN   LatestJobs AS lj ON el.ID = lj.EquipmentID
            AND lj.RowNumber = 1
0 голосов
/ 01 июля 2009

Какие типы данных каждого поля в списке? Если это longchar (sql) или memo (в доступе), вы не сможете использовать отдельную функцию.

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